问问题
3109 次
4 回答
4
;WITH rw AS
(
SELECT '0000AF0012B' ishexornot
UNION ALL
SELECT '0000AF0012G'
UNION ALL
SELECT '0000AF0012 '
)
SELECT *, CASE WHEN ishexornot LIKE '%[^0-9A-F]%' THEN 0 ELSE 1 END
FROM rw
所以
WHERE [GUID] LIKE '%[^0-9A-F]%'
于 2016-06-21T09:37:51.440 回答
3
Just use LIKE
with a wildcard character for a specific range:
SELECT * FROM [GUIDs] WHERE [GUID] LIKE '%[g-z]%';
于 2016-06-21T08:33:20.633 回答
2
从 SQL Server 2012 开始,您可以使用TRY_CONVERT()
:
declare @t table (
Id int identity (1,1) primary key,
Value varchar(100) not null
);
insert into @t (Value)
values
('F6AA1EE0-DF55-43E8-92ED-B2A84E621485'),
('F32E4621CE004C47889DEBDA9BA790AF'),
('09F94C95-9004-4C7C-8F5D-9CA374546288'),
('5DAFD4C7-C780-4F32-9BF1-52027371546A'),
('4D81BD419BFE42EA956E715023EF3B77');
select t.*
from @t t
where try_convert(uniqueidentifier, t.Value, 2) is null;
与 with 不同CONVERT()
,示例中的查询没有错误,并返回第 2 行和第 5 行。
于 2016-06-21T11:16:13.780 回答
0
在 postgres 中,您可以使用POSIX 正则表达式
select "GUID" ~ '[0-9A-F]{32}' as is_hex from the_table;
上面检查字符串的长度是否也是 32
于 2020-06-22T10:53:00.163 回答