【问题标题】:Creating a computed(possibly hidden) column using COLLATE SQL使用 COLLATE SQL 创建一个计算的(可能是隐藏的)列
【发布时间】:2022-01-24 16:46:38
【问题描述】:

我正在使用 SSMS 18。

我有一列包含 500,000,000 条代码记录。这些代码以表示对象的多个字符开头,然后是随机字符。 例如:

AZ4658 & TU874U = A-Z

sd8udf & kl8udf = a-z

0huoer & 0huoer = 0

3bhlbc & 3jhkla = 3

5bfdsg & 5byfdu = 5

9nbgyc & 98cnjj = 9

在我的“WHERE”子句中,我有: WHERE [Code_Records] COLLATE Latin1_General_BIN Like '[A-Z]' 或者 WHERE [Code_Records] COLLATE Latin1_General_BIN Like '[a-z]' 或者 WHERE [Code_Records] COLLATE Latin1_General_BIN Like '[0]' 或者 WHERE [Code_Records] COLLATE Latin1_General_BIN Like '[3]' etc

但是,这非常慢,因为索引否定了函数(反之亦然?)。有没有办法使用 COLLATE 函数插入计算列,然后索引该列?

谢谢,我是一年级 IT 学徒,所以基本上一切对我来说都是新的! 艾丹

【问题讨论】:

  • 假设您使用的是 SQL Server,请标记您的数据库及其版本

标签: sql collate


【解决方案1】:

LIKE 表达式末尾缺少 % 通配符:

WHERE [Code_Records] COLLATE Latin1_General_BIN Like '[3]%' 

或者,您可以使用Substring() 获取第一个字符并匹配它。

【讨论】:

  • 不喜欢上面的评论。这是我第一次在这里提出问题,我经常看到人们被问到他们使用哪个版本的 SSMS。我复制并粘贴了错误的字符,在我的 where 子句中是: WHERE [Code_Records] COLLATE Latin1_General_BIN Like '[3]____' 但这不是我想要的帮助,它返回了我需要的一切,但性能很糟糕,它被使用了在多个程序中,它会减慢其他人的查询速度。我需要知道是否可以使用 COLLATE 从表中的另一列填充计算列并建立索引?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 2019-07-02
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多