【发布时间】:2022-01-22 11:07:10
【问题描述】:
如何仅选择格式为 XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 的字符串,其中 X 是任意数字或任意大写(不是小写)字符?
示例数据集:
ed54cb09-b402-4551-912d-b8e0fec69d9e --I do not want to select this one
00029B19-80CC-4FF8-BE11-BDB55FC7FC2A --I do want to select this one
有些是全大写,有些不是,这是一个 varchar 字段。我只想选择这些全大写 UUID,不包括其余的。
目前我正在使用 _ 通配符来查找基本的 UUID 格式,但看起来 UPPER 不适用于 _ 通配符。例如:
SELECT mycolumn
FROM mytable t
WHERE t.mycolumn like UPPER('________-____-____-____-____________') COLLATE SQL_Latin1_General_Cp1_CS_AS
【问题讨论】:
-
您可以尝试将其转换为
uniqueidentifier并从尝试的转换中筛选出值为NULL的行。 -
如果
MyColumn = Upper( MyColumn )那么你不应该对小写字符有任何问题。Try_Convert可以处理其余的验证。您将Upper与like一起使用没有意义。将所有小写下划线更改为大写不会有太大作用。 -
我错过了这个奇怪的要求,@DaleK。似乎也需要
COLLATE。也许需求是 XY 问题的一部分。例如,为什么 OP 首先不使用uniqueidentifier -
旁白:来自RFC4122:“每个字段都被视为一个整数,并将其值打印为一个以零填充的十六进制数字字符串,最高有效位在前。十六进制值“a”到"f" 输出为小写字符,输入时不区分大小写。"
-
@David 你知道该怎么做when someone answers吗?
标签: sql sql-server tsql