Как хранить разделенные запятыми не английские буквы в строке sql - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть правило SQL, где он проверяет строку, начиная с номера. У меня есть неанглийские номера, и я включил одно условие.

когда я храню sql squery в виде строки в строке, это показывает? вместо буквы

тип данных столбца - nvarchar, а параметры сортировки - SQL_Latin1_General_CP1_CI_AS

SELECT * Table Name WHERE (LEFT(RESELLER_CITY_NM,1) LIKE ''[0-9]'') or left(RESELLER_CITY_NM,1) in (N''一'',N''二'',N''三'',N''四'',N''五'',N''六'',N''七'',N''八'',N''九'',N''十'',N''零'',N''两'',N''千'',N''万'',N''億'',N''一つ'',N''二つ'',N''三つ'',N''四つ'',N''五つ'',N''六つ'',N''七つ'',N''八つ'',N''九つ'',N''十'',N''일'',N''이'',N''삼'',N''사'',N''오'',N''육'',N''칠'',N''팔'',N''구'',N''십'',N''백'',N''천'',N''만'',N''일억'',N''십억'',N''백억'',N''один'',N''два'',N''три'',N''четыре'',N''пять'',N''шесть'',N''семь'',N''восемь'',N''девять'',N''десять'',N''ноль'',N''сто'',N''тысяча'',N''миллиард'',N''миллион'')
SELECT * Table Name WHERE (LEFT(RESELLER_CITY_NM,1) LIKE ''[0-9]'') or left(RESELLER_CITY_NM,1) in (N''一'',N''二'',N''三'',N''四'',N''五'',N''六'',N''七'',N''八'',N''九'',N''十'',N''零'',N''两'',N''千'',N''万'',N''億'',N''一つ'',N''二つ'',N''三つ'',N''四つ'',N''五つ'',N''六つ'',N''七つ'',N''八つ'',N''九つ'',N''十'',N''일'',N''이'',N''삼'',N''사'',N''오'',N''육'',N''칠'',N''팔'',N''구'',N''십'',N''백'',N''천'',N''만'',N''일억'',N''십억'',N''백억'',N''один'',N''два'',N''три'',N''четыре'',N''пять'',N''шесть'',N''семь'',N''восемь'',N''девять'',N''десять'',N''ноль'',N''сто'',N''тысяча'',N''миллиард'',N''миллион'')```


Output:

    SELECT * from table A with (nolock)  WHERE (LEFT(RESELLER_CITY_NM,1) LIKE '[0-9]') or left(RESELLER_CITY_NM,1) in (N'?',N'?',N'?',N'?',N'?',N'?',N'?',N'?',N'?',N'?',N'?',N'?',N'?',N'?',N'?',N'??',N'??',N'??',N'??',N'??',N'??',N'??',N'??',N'??',N'?',N'?',N'?',N'?',N'?',N'?',N'?',N'?',N'?',N'?',N'?',N'?',N'?',N'?',N'??',N'??',N'??',N'????',N'???',N'???',N'??????',N'????',N'?????',N'????',N'??????',N'??????',N'??????',N'????',N'???',N'??????',N'????????',N'???????')

1 Ответ

0 голосов
/ 03 апреля 2019

Я подозреваю, что это динамический запрос. Возможно, ваше City поле имеет значение nvarchar, но я полагаю, что вы храните свой запрос в varchar. Или вам не хватает N в начале строковой константы. Вот пример.

declare @T nvarchar(1000);
declare @Q nvarchar(1000);

set @T = N'select * from TableName 
where left(City,1)in(N''一'',N''二'',N''三'',N''四'',N''五'')';

set @Q = Replace(@T, N'TableName', N'A with (nolock)' );

print @Q;

exec sp_executesql @Q;

Убедитесь, что переменная, содержащая текст запроса, nvarchar. И убедитесь, что строковая константа начинается с N'

...