sql server中的左函数

sql server中的左函数,sql,sql-server,database,Sql,Sql Server,Database,表“期间”中有一列“日期”,示例数据为2010年2月3日 现在,在where条件Left(Date,3)='Feb'中也会给出结果,Left函数不区分大小写吗?例如,您可以在查询中设置collate Declare @YourTable table (Col varchar(25)) Insert Into @YourTable values ('February'), ('february'), ('FEBRUARY') Select * From @YourTable Wher

表“期间”中有一列“日期”,示例数据为2010年2月3日


现在,在where条件
Left(Date,3)='Feb'
中也会给出结果,Left函数不区分大小写吗?

例如,您可以在查询中设置collate

Declare @YourTable table (Col varchar(25))
Insert Into @YourTable values 
('February'),
('february'),
('FEBRUARY')

Select * 
 From  @YourTable 
 Where left(Col,3) = 'Feb' COLLATE SQL_Latin1_General_CP1_CS_AS
返回

February
相反,如果设置为
SQL\u Latin1\u General\u CP1\u CI\u AS
(不敏感)

你会得到

February
february
FEBRUARY

您还可以使用以下查询:

select * 
from table_name
where left(lower(column_name),3)  = 'feb'
编辑:
如果您不关心大小写敏感度,也不确定排序规则,如果排序规则是CI(不区分大小写),则不需要“lower”,但使用它并没有什么害处,因为此函数似乎并不昂贵。

Left不区分大小写,也不区分大小写。重要的是排序规则。现在您知道了LEFT的工作原理,应该开始将日期存储为date或datetime,而不是字符串。:)我无法正确地理解会导致这个关于区分大小写的问题的混淆,特别是集中在
Left
函数上。如果你有一个区分大小写的排序规则,feb将是相等的FEB@SeanLange,同意,取决于OP实际需要什么,如果不关心区分大小写,他可以使用我的解决方案,如果需要区分大小写,他可以使用John的解决方案。我要说的是,LOWER在这里是一个毫无意义的函数,除非排序规则区分大小写。