【问题标题】:SQL Select values starting with a capital letterSQL 选择以大写字母开头的值
【发布时间】:2021-10-20 17:52:41
【问题描述】:

我有一个带有 varchar 类型列的表。我想从此列中选择仅以大写字母开头的值。

例如

我的表

Col1          Col2

Argentina     2
Brasil        3
uruguay       4

我希望我的选择查询返回:

Argentina
Brasil

【问题讨论】:

  • 请不要在您的问题中添加答案;接受对你有用的答案就足够了。
  • 好的@Matt,谢谢!

标签: sql sql-server


【解决方案1】:

这有点痛苦。您可以使用ASCII()COLLATE,但这取决于数据的存储方式。对于varchar()char(),这将起作用:

where ASCII(left(col1, 1)) between ASCII('A') and ASCII('Z')

【讨论】:

  • 左函数需要 2 个参数。
  • @TobySpeight 。 . .谢谢。
【解决方案2】:
 With TestData As
    (
    Select '012324' As Name
    Union All Select 'ABC'
    Union All Select 'abc'
    Union All Select 'aBc'
    Union All Select 'ABé'
    Union All Select 'ABÉ'
    )
Select *
 From TestData
Where Name = UPPER(Name) Collate SQL_Latin1_General_CP1_CS_AS

希望这会有所帮助

【讨论】:

  • 您的示例执行为 012324, ABC, ABÉ,这是“以大写字母开头”的错误(使用 SQL Server 2014)
【解决方案3】:

您可以使用 UPPERCOLLATE 函数来执行此操作。

例如:

create table #a (text varchar(10))

insert into #a values ('HAI'),('Hai'),('hai'),('44A')

select *from #a where substring([text],1,1) = substring(Upper([text]),1,1) collate SQL_Latin1_General_CP1_CS_AS
                                            AND substring([text],1,1) like '[A-Z]%'

【讨论】:

  • 这也会返回不以字母开头的字符串
  • 我只是用不等于小写的版本来代替
【解决方案4】:

从 MyTable 中选择 Col1,其中 Col1 喜欢 '[A-Z]%'

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-02-26
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-29
相关资源
最近更新 更多