【问题标题】:using LIKE and BETWEEN in sql query在 sql 查询中使用 LIKE 和 BETWEEN
【发布时间】:2013-11-29 10:03:39
【问题描述】:
alter PROCEDURE [dbo].[select_User_attendance_master_Date]        
(        
@From_date NVarchar(100),  
@To_date NVarchar(100)            

)        
as        
 begin        
  select           

 Employee_Attendace_Code,        
 Convert(varchar(11),Employee_Attendance.Attendance_day,106) as Attendanceday  

    from Employee_Attendance        
(Convert(varchar(11),Employee_Attendance.Attendance_day,106) between '%'+@From_date+'%'    
 AND  '%'+@To_date+'%')     

end

此查询不起作用,它在 Attendance_day 值中一无所获,例如 2013-11-28

【问题讨论】:

  • 我不知道您为什么将日期值转换为varchar 而不是将varchar 转换为日期!!! Employee_Attendance.Attendance_day的数据类型是什么??

标签: sql sql-server stored-procedures between sql-like


【解决方案1】:

请重新考虑您的问题。 LIKE 非常适合对字符串进行操作,但不适用于日期。 根据您的数据,它可以返回一个起始日期大于当前日期。

尝试使用日期/日期时间变量,如果您以字符串形式接收日期,请将日期转换为日期/日期时间数据类型,然后将这些值放在中间。

如果可以的话,将日期参数作为日期/日期时间类型接收。

【讨论】:

    【解决方案2】:

    我相信您正在寻找这个? 您缺少 WHERE 子句,我更正了您选择的第一列的错字。

    ALTER PROCEDURE [dbo].[select_User_attendance_master_Date]        
    (        
    @From_date NVarchar(100),  
    @To_date NVarchar(100)            
    
    )        
    AS        
     BEGIN        
        SELECT           
            Employee_Attendance_Code,        
            Employee_Attendance.Attendance_day as Attendanceday  
        FROM Employee_Attendance        
        WHERE Employee_Attendance.Attendance_day BETWEEN @From_date AND @To_date     
    
    END
    

    【讨论】:

    • 我忘记粘贴 WHERE 了,它包含在我的 SP 中,
    • 在 '%'+@From_date+'%' 和 '%'+@To_date+'%' 之间)它不起作用,我的意思是它什么也不返回
    • 正如 NickvV 所回答的,当您使用 BETWEEN 时,您不要放置 '%','%' 用于 LIKE 子句。加日期不存储为 char,使用带日期的 char 构造不是很好。
    猜你喜欢
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 2015-10-18
    • 2015-09-29
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多