如何在純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'返回一個布爾值,你似乎想要返回一個字符串的東西。你能澄清你真正想要的嗎? –