我要查找存储在单独表中的俄语数字列。俄语数字由具有多个字母的字符串组成。
问题是当我使用任何字符串函数时都会失败,因为俄语数字是由多个单词组成的。
我不仅要检查整个字符串,而且要检查整个外观。
我有一条规则,该规则检查是否有任何列仅是整数。在这里,我正在检查俄罗斯整数。如果Rule通过,它将引发错误“仅包含数字”
例如:
名称
пять83e094
пять83e094
семьvnala
俄罗斯数字 俄语
один
два
три
четыре
пять
шесть
семь
восемь
девять
десять
ноль
сто
тысяча
NULL
NULL
миллиард
NULL
миллион
怎么做?
解决方案:
`select n'один' Name into #TEMP union
select n'два' union
select n'три' union
select n'четыре' union
select n'пять' union
select n'шесть' union
select n'семь' union
select n'восемь' union
select n'девять' union
select n'десять' union
select n'ноль' union
select n'сто' union
select n'тысяча' union
select n'NULL' union
select n'NULL' union
select n'миллиард' union
select n'NULL' union
select n'миллион'
select n'пятьвосемь' Country into #TEMP1 union
select n'india ' union
select n'japanone' union
select n'нольмиллиард' union
select n'fourone ' union
select n'europe '
DECLARE
@MAX_CNT NUMERIC,
@MIN_CNT NUMERIC,
@WORD_LEN_CNT NUMERIC,
@WORD_CNT NUMERIC,
@COUNTRY NVARCHAR(50),
@STRING NVARCHAR(50),
@STRING_BUFFER NVARCHAR(50),
@IF_CNT NUMERIC;
SET @MIN_CNT=1;
SET @WORD_CNT=1;
SET @STRING='';
SET @COUNTRY='';
BEGIN
select @MAX_CNT =(select MAX(SEQ) Coun from (
SELECT ROW_NUMBER()OVER(ORDER BY COUNTRY)SEQ,* FROM #TEMP1
)xx)
---------------------WHILE LOOP-----------------------------------------
WHILE(@MIN_CNT<=@MAX_CNT)
BEGIN
--PRINT 1
SELECT @COUNTRY=(select country from (
SELECT ROW_NUMBER()OVER(ORDER BY COUNTRY)SEQ,* FROM #TEMP1
)xx WHERE SEQ=@MIN_CNT )
--print @COUNTRY
--PRINT @COUNTRY
-----------------CHECKING THE WORD WHETHER NUMBER OR NOT---------------------------
SET @WORD_LEN_CNT=LEN(@COUNTRY);
SET @WORD_CNT=1
SET @STRING_BUFFER=''
-----------------SECOND WHILE LOOP-------------------------------------------------
WHILE @WORD_CNT<=@WORD_LEN_CNT
BEGIN
--PRINT 2
SELECT @STRING=SUBSTRING(@COUNTRY,@WORD_CNT,1)
SET @STRING_BUFFER=@STRING_BUFFER+@STRING
SET @WORD_CNT=@WORD_CNT+1
--print @STRING_BUFFER
-----------------CHECKING THE NUMBER PRESENT IN BASE TABLE------------------------
SELECT @IF_CNT=COUNT(1) FROM #TEMP WHERE NAME=@STRING_BUFFER
--print @IF_CNT
IF @IF_CNT=1
BEGIN
SET @STRING_BUFFER=''
END
end
IF @STRING_BUFFER=''
BEGIN
--PRINT 3
--print @COUNtry
PRINT 'Contains Digits'END
SET @MIN_CNT=@MIN_CNT+1;
end
end'