Спасибо за вашу помощь.

le1 есть столбец nvarchar с именем umsg, который содержит текст в кодировке Unicode, а иногда и на английском языке.

Я хочу узнать текст на английском языке в столбце umsg.

select * 
from table1 
where 
    RDate >='01/01/2014' and RDate < '09/26/2017' 
    and umsg = convert(varchar(max), umsg)

Я использовал приведенный выше запрос, который отлично работает на региональном языке, но иногда терпит неудачу. Предположим, что col содержит текст, такой как «ref no». Я думаю, что вышеупомянутое сообщение является Unicode, если я использовал вышеупомянутый запрос, он / sql показывает меня как английский, а не Unicode. Как с этим справиться.

Table :
Id  Date                      Umsg
1   2017-09-12 00:00:00.000   The livers detoxification processes.
2   2017-09-11 00:00:00.000   Purposely added 1 
3   2017-09-10 00:00:00.000   फेंगशुई के छोटे-छोटे टिप्स से आप जीवन की विषमताओं से                       स्वयं को बचा सकते
4   2017-09-17 00:00:00.000    तनाव एक लाइलाज बीमारी कतई नहीं है। कुछ लोग तनाव को                                     आसानी से झेल लेते ह
5   2017-09-17 00:00:00.000    ref no été

Выше представлены данные в моей таблице. Но я хочу данные / вывод, как:

    Id      Date                      Umsg
    1   2017-09-12 00:00:00.000   The livers detoxification processes.
    2   2017-09-11 00:00:00.000   Purposely added 1
 Jui Test03 окт. 2017 г., 06:43
Да, я использую SQL Server 2012
 Jui Test03 окт. 2017 г., 06:53
Я не могу использовать nvarchar, если я использовал его, он также выдаст все сообщения в Юникоде. Я хочу только английское сообщение. Столбец уже является типом Nvarchar. Снова преобразование его в nvarchar, не имеет смысла.
 S.Serpooshan03 окт. 2017 г., 06:49
почему вы используете varchar вместо nvarchar
 sepupic03 окт. 2017 г., 08:56
@Jui Test Как будет выглядеть вывод, если строка содержит символы Unicode и ASCII?
 RGS03 окт. 2017 г., 06:41
@Jui Test, попробуйте использовать nvarchar вместо varchar, где условие. конвертировать (nvarchar (max), umsg).

Ответы на вопрос(2)

Решение Вопроса

проверьте ниже:

;WITH CTE
 AS (
 SELECT ID,
        DATE,
        umsg,
        CASE
            WHEN(CAST(umsg AS VARCHAR(MAX)) COLLATE SQL_Latin1_General_Cp1251_CS_AS) = umsg
            THEN 0
            ELSE 1
        END HasSpecialChars
 FROM <table_name>)
 SELECT ID,
        DATE,
        umsg
 FROM CTE
 WHERE Date >= '01/01/2014'
       AND Date < '09/26/2017'
       AND HasSpecialChars = 0;

Желаемый результат:

ID  DATE                     umsg
1   2017-09-12 00:00:00.000  The livers detoxification processes.                                                                     
2   2017-09-11 00:00:00.000  Purposely added 1      

Надеюсь, это поможет вам.

что хотите, в случае, если в одной и той же строке есть несколько символов Юникод и несколько символов ascii, поэтому я дам вам 1 идею и 1 решение для случая, если вы хотите найти только строки «чисто английский» или «смешанный».

Для этого вам нужна таблица натуральных чисел. Если у вас нет такой таблицы, вы можете сгенерировать ее следующим образом:

select top 1000000  row_number() over(order by getdate()) as n
into dbo.nums
from sys.messages m1 cross join sys.messages m2;

alter table dbo.nums alter column n int not null;

alter table dbo.nums add constraint PK_nums_n primary key(n); 

Теперь, когда у вас есть таблица натуральных чисел, мы собираемся разбить ваши строки на отдельные символы, чтобы проверить,ascii(character) = unicode(character):

declare @t table(col Nvarchar(200));
insert into @t values
(N'ref no été'), (N'The livers detoxification processes.'), (N'फेंगशुई के छोटे-छोटे टिप्स से आप जीवन की विषमताओं से')

select t.col, n, substring(t.col, n, 1) as nth_character,
       ascii(substring(t.col, n, 1)) as ascii,
       unicode(substring(t.col, n, 1)) as uni
from @t t join dbo.nums n
       on n.n <= len(t.col); -- this is to give you an idea how to see if it's unicode character or ascii

with cte as
(
select t.col, n, substring(t.col, n, 1) as nth_character,
       ascii(substring(t.col, n, 1)) as ascii,
       unicode(substring(t.col, n, 1)) as uni
from @t t join dbo.nums n
       on n.n <= len(t.col)
)
select col, 
       case
            when sum(case when ascii = uni then 1 else 0 end) = count(*) then 'English only'
            else 'Not only English'
       end as eng_or_not
from cte
group by col -- row level solution

Первая часть кода показывает вашу символьную строку вместе с символьным кодом unicode ascii и unde: где они совпадают, это символ ascii.

Вторая часть просто проверить, все ли символы ascii.

 Jui Test03 окт. 2017 г., 13:42
Спасибо за вашу помощь.

Ваш ответ на вопрос