SQL upper / lower + substring运行不正常

时间:2018-06-11 05:06:36

标签: sql sql-server substring

我有一个名为" name"在其他列之间。我正在使用sql函数进行实验,但我不知道为什么这不起作用。当我运行此代码时:

select name , upper(SUBSTRING(name,1,1)), SUBSTRING(name,1,1) from primeraTabla

我得到一张表:

name     (no column name)    (no column name)
paco     P                   p
Fernando F                   F
....

但是当我尝试时:

select * from primeraTabla where upper(SUBSTRING(name,1,1)) = SUBSTRING(name,1,1)

应排除名为paco的第一行,但不是。过滤器无法正常工作。

所以问题是,为什么这个过滤器不起作用?

2 个答案:

答案 0 :(得分:2)

尝试使用“ASCII”

select * from primeraTabla 
where ascii(upper(SUBSTRING(name,1,1))) = ascii(SUBSTRING(name,1,1))

<强>结果:

name
--------------------
Fernando

db<>fiddle Demo Link

答案 1 :(得分:1)

您必须使用 COLLATE Latin1_General_CS_AS 才能使搜索区分大小写。

<强>查询

select * from primeraTabla 
where upper(SUBSTRING(name,1,1)) COLLATE Latin1_General_CS_AS = SUBSTRING(name,1,1);

即使您可以通过

永久更改任何表的任意列的排序规则

<强>查询

ALTER TABLE [your_table_name]
ALTER COLUMN [your_column_name] VARCHAR(100)
COLLATE Latin1_General_CS_AS