如何在纯TSQL中创建标量函数以获得与C#中的Char.IsLetterOrDigit()
相同的结果?TSQL中的Char.IsLetterOrDigit
我需要所有的Unicode的字母和数字,包括特殊字母像ç
等
UPDATE: 例如,输入“-S *đčć1ž/”,结果应该是唯一的“šđčć1ž”
如何在纯TSQL中创建标量函数以获得与C#中的Char.IsLetterOrDigit()
相同的结果?TSQL中的Char.IsLetterOrDigit
我需要所有的Unicode的字母和数字,包括特殊字母像ç
等
UPDATE: 例如,输入“-S *đčć1ž/”,结果应该是唯一的“šđčć1ž”
@ LasseV.Karlsen的评论让我意识到我不得不返工我的代码,我希望这将工作:
create function [dbo].[f_clense]
(
@txt nvarchar(8000)
) returns nvarchar(8000)
as
begin
declare @firstupperletter char(1)='A'
declare @lastupperletter char(1)='Z'
declare @firstlowerletter char(1)='a'
declare @lastlowerletter char(1)='z'
declare @firstnumber char(1)='0'
declare @lastnumber char(1)='9'
declare @len int = len(@txt)
while @len > 0
select @txt = case when @c between @firstupperletter and @lastupperletter
or @c between @firstlowerletter and @lastlowerletter
or @c between @firstnumber and @lastnumber
then @txt
else stuff(@txt, @len, 1, '')
end,
@len += -1
return @txt
end
go
select [dbo].[f_clense]('abc&d23/')
+1有没有原因你没有先检查数字? – Paparazzi
@Blam不,我没有考虑过哪个部分更快。但它最有可能是数字部分。好点 –
由于规范是他想要什么char.IsLetterOrDigit提供,那么这是远不及。有很多unicode代码点被分类为字母,但不包含大写和小写代码点。此外,unicode数字不仅仅是0-9。 –
如果你想要的结果相同Char.IsLetterOrDigit()在.NET那我就只去CLR我ntegration
我不认为你会在纯TSQL为此在
现在,你可能只是做一次,填充在SQL表与IsLetterOrDigit
所有Unicode字符还有的[ 'UNICODE'](http://technet.microsoft.com/en-us/library/ms180059.aspx)函数来获取代码点,但在此之后,你自己。您必须基本上使unicode标准中的表能够执行查找,因为没有公式化的方式来确定它们属于这些类别。 –
'Char.IsLetterOrDigit'返回一个布尔值,你似乎想要返回一个字符串的东西。你能澄清你真正想要的吗? –