使用SQL语句检测案例

时间:2011-06-09 17:20:17

标签: sql sql-server case-sensitive

我正在尝试使用SQL命令查看文本块并确定其中是否有3个连续的大写字母。有办法做到这一点吗?或者甚至更简单,SQL是否有办法检测案例?

4 个答案:

答案 0 :(得分:7)

编辑问题最初标记为mysql,这样就可以了。它已被重新标记为sql-server,这对MS SQL Server无效。

您可以使用REGEXP

SELECT columnname REGEXP '[A-Z]{3}' FROM table;

返回columnname匹配的地址。

答案 1 :(得分:3)

您可以使用的功能

create function ThreeUpperInARow(@s varchar(max)) returns bit
begin
  declare @Rows int

  ;with cte as
  (
    select left(@s, 3) as Part,
           stuff(@s, 1, 1, '') as Rest
    union all
    select left(Rest, 3) as Part,
           stuff(Rest, 1, 1, '') as Rest
    from cte
    where len(Rest) >= 3
  )
  select @Rows = count(*)
  from cte
  where upper(Part) = Part COLLATE Latin1_General_CS_AS

  return case @Rows when 0
           then 0
           else 1
         end
end

用法:

declare @T table(ID int identity, Txt varchar(max))
insert into @T
select 'aaaAFAaaaBB' union all
select 'aaaAAaaaBB'

select T.ID,
       T.Txt,
       dbo.ThreeUpperInARow(T.Txt) as Upp
from @T as T

结果:

ID          Txt             Upp
----------- --------------- -----
1           aaaAFAaaaBB     1
2           aaaAAaaaBB      0

答案 2 :(得分:1)

要扩展Michael的答案:您可以使用此结构进行区分大小写的比较:

SELECT 'abc' LIKE BINARY 'ABC';  /*false*/

SELECT 'aBc' LIKE BINARY 'aBc'; /*true*/

请参阅:http://dev.mysql.com/doc/refman/5.5/en/case-sensitivity.html
并且:http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like

答案 3 :(得分:0)

我通过将varchars转换为varbinary来成功比较大写,因为在SQL中大写和小写比较相等

SELECT * 从表 WHERE CAST(SUBSTRING(ColumnName,1,3)as varbinary)= CAST(SUBSTRING(UPPER(ColumnName),1,3)as varbinary)

这样做的一个问题是,如果你有像O'Reilly这样的名字,那么它将返回true。