Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как выбрать из поля часть его которая является буквами, а не какими то знаками или цифрами  [new]
evgenybe
Member

Откуда: Израиль. Хадера.
Сообщений: 198
В поле есть некое текстовое значение (не кириллица), например 'גֶ'ל' ☺". Мне надо выбрать начальную часть его, которая не является цифрами или спец значками и переписать выбранную часть в другое поле. Как это сделать?


Спасибо!
Евгений Боуден
27 июл 11, 16:19    [11035164]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать из поля часть его которая является буквами, а не какими то знаками или цифрами  [new]
Glory
Member

Откуда:
Сообщений: 104751
Какой результат должен получится для строки "dfghsv1io4n sbd3pi44" ?
27 июл 11, 16:24    [11035210]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать из поля часть его которая является буквами, а не какими то знаками или цифрами  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
evgenybe,

для начала надо бы перечислить допустимые символы или в таблице или хотя бы в строке.
А потом всё просто - LEFT + PATINDEX
27 июл 11, 16:25    [11035223]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать из поля часть его которая является буквами, а не какими то знаками или цифрами  [new]
Raoul
Member

Откуда:
Сообщений: 177
Вероятно, проще всего через PATINDEX:
declare @pat nvarchar(15);
set @pat = N'%[^алеф-тав]%';

select
    case PATINDEX(@pat,mycol)
        when 0 then
             mycol
        else
             LEFT(mycol, PATINDEX(@pat,mycol)-1)
    end as myword
    from mytable;

27 июл 11, 16:31    [11035270]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать из поля часть его которая является буквами, а не какими то знаками или цифрами  [new]
evgenybe
Member

Откуда: Израиль. Хадера.
Сообщений: 198
Glory,

"dfghsv"
27 июл 11, 18:19    [11036036]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать из поля часть его которая является буквами, а не какими то знаками или цифрами  [new]
evgenybe
Member

Откуда: Израиль. Хадера.
Сообщений: 198
Raoul
Вероятно, проще всего через PATINDEX:


Что-то я с Update запутался

ALTER PROCEDURE dbo.GetWord_PatIndex
AS

	/* SET NOCOUNT ON */

declare @pat nvarchar(15);
set @pat = N'%[^א-ת]%';

UPDATE RootHeb
SET WordHeb = (
select
    case PATINDEX(@pat,Heb)
        when 0 then
             Heb
        else
             LEFT(Heb, PATINDEX(@pat,Heb)-1)
    end as myword
    from RootHeb);

	RETURN


Подскажите,пожалуйста, как правильно
27 июл 11, 18:55    [11036197]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать из поля часть его которая является буквами, а не какими то знаками или цифрами  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
evgenybe,

UPDATE  u
SET     WordHeb = CASE PATINDEX(@pat, Heb)
                    WHEN 0 THEN Heb
                    ELSE LEFT(Heb, PATINDEX(@pat, Heb) - 1)
                  END
FROM    RootHeb u
?
27 июл 11, 19:11    [11036239]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать из поля часть его которая является буквами, а не какими то знаками или цифрами  [new]
evgenybe
Member

Откуда: Израиль. Хадера.
Сообщений: 198
Raoul
Вероятно, проще всего через PATINDEX:

ALTER PROCEDURE dbo.GetWord_PatIndex
AS

	/* SET NOCOUNT ON */

declare @pat nvarchar(15);
set @pat = N'%[^א-ת]%';

UPDATE RootHeb
SET WordHeb = LEFT(Heb, PATINDEX(@pat,Heb)-1)

Так тоже не работает из-за строк в которых PATINDEX = 0
27 июл 11, 19:12    [11036245]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать из поля часть его которая является буквами, а не какими то знаками или цифрами  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
evgenybe
Raoul
Вероятно, проще всего через PATINDEX:

ALTER PROCEDURE dbo.GetWord_PatIndex
AS

	/* SET NOCOUNT ON */

declare @pat nvarchar(15);
set @pat = N'%[^א-ת]%';

UPDATE RootHeb
SET WordHeb = ISNULL(LEFT(Heb, NULLIF(PATINDEX(@pat,Heb),0)-1),WordHeb)

Так тоже не работает из-за строк в которых PATINDEX = 0
27 июл 11, 20:33    [11036431]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать из поля часть его которая является буквами, а не какими то знаками или цифрами  [new]
evgenybe
Member

Откуда: Израиль. Хадера.
Сообщений: 198
iap,
Спасибо! Все получилось!
27 июл 11, 23:00    [11036789]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать из поля часть его которая является буквами, а не какими то знаками или цифрами  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
evgenybe
iap,
Спасибо! Все получилось!
А я вижу, что ошибся:
ALTER PROCEDURE dbo.GetWord_PatIndex
AS

	/* SET NOCOUNT ON */

declare @pat nvarchar(15);
set @pat = N'%[^א-ת]%';

UPDATE RootHeb
SET WordHeb = ISNULL(LEFT(Heb, NULLIF(PATINDEX(@pat,Heb),0)-1),Heb)
28 июл 11, 11:44    [11038575]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать из поля часть его которая является буквами, а не какими то знаками или цифрами  [new]
evgenybe
Member

Откуда: Израиль. Хадера.
Сообщений: 198
iap,

О, спасибо!
И еще один дополнительный вопрос.
А как выбрать оставшуюся часть поля Heb в другое поле.
Я попытался вот так:
declare @pat nvarchar(15);
set @pat = N'%[^א-ת]%';

UPDATE RootHeb
SET WordHeb = ISNULL(LEFT(Heb, NULLIF(PATINDEX(@pat,Heb),0)-1),Heb),
Note = ISNULL(RIGHT(Heb, NULLIF(PATINDEX(@pat,Heb),0)-1),Heb)


Это выдает неправильный кусок, так как количество знаков справа должно быть равно количеству знаков в ЦЕЛОМ поле минус количество знаков которое я беру сейчас. А как подставить значение длины ЦЕЛОГО значения поля я не знаю.

Подскажите пожалуйста.
28 июл 11, 13:44    [11039471]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать из поля часть его которая является буквами, а не какими то знаками или цифрами  [new]
Raoul
Member

Откуда:
Сообщений: 177
Note = ISNULL(SUBSTRING(Heb, NULLIF(PATINDEX(@pat,Heb),0),4000),'')
28 июл 11, 14:11    [11039602]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать из поля часть его которая является буквами, а не какими то знаками или цифрами  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
evgenybe,
STUFF(Heb,1, PATINDEX(@pat,Heb),'')
28 июл 11, 14:11    [11039606]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать из поля часть его которая является буквами, а не какими то знаками или цифрами  [new]
evgenybe
Member

Откуда: Израиль. Хадера.
Сообщений: 198
Raoul
Note = ISNULL(SUBSTRING(Heb, NULLIF(PATINDEX(@pat,Heb),0),4000),'')


Спасибо! Совершенно верно. Это я туплю от жары
28 июл 11, 14:12    [11039615]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать из поля часть его которая является буквами, а не какими то знаками или цифрами  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
evgenybe,

что вы называете "целым полем"?
"Всё поле"?
"Поле целого типа"?
28 июл 11, 14:13    [11039616]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать из поля часть его которая является буквами, а не какими то знаками или цифрами  [new]
evgenybe
Member

Откуда: Израиль. Хадера.
Сообщений: 198
iap,
Значение поля Heb. То есть какой-то текст в нем.
SUBSTRING позволяет мне взять часть его после заданной позиции.

Есть и еще одна задача.
Надо выбрать все строки, в которых в поле Rus находятся нерусские буквы (иврит). Плюс к тому там первым знаком могут быть знаки (, ), №, и #

Как составить паттерн?
28 июл 11, 15:43    [11040264]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать из поля часть его которая является буквами, а не какими то знаками или цифрами  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
evgenybe
iap,
Значение поля Heb. То есть какой-то текст в нем.
Чем тогда STUFF не устроил?
28 июл 11, 16:33    [11040600]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать из поля часть его которая является буквами, а не какими то знаками или цифрами  [new]
evgenybe
Member

Откуда: Израиль. Хадера.
Сообщений: 198
iap
evgenybe
iap,
Значение поля Heb. То есть какой-то текст в нем.
Чем тогда STUFF не устроил?


Ну почему не устроил. Устроил. Просто SUBSTRING успел сделать несколько раньше. А делать повторно не имеет смысла.

У меня дополнительный вопрос. Как выбрать все записи, в которых в какой-то позиции в поле Rus имеются ивритские буквы? Причем они не обязательно первыми стоят.
28 июл 11, 16:55    [11040730]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать из поля часть его которая является буквами, а не какими то знаками или цифрами  [new]
Raoul
Member

Откуда:
Сообщений: 177
evgenybe
Как выбрать все записи, в которых в какой-то позиции в поле Rus имеются ивритские буквы? Причем они не обязательно первыми стоят.

SELECT * FROM  RootHeb WHERE PATINDEX(N'%[א-ת]%', Rus)>0;
28 июл 11, 20:37    [11041828]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать из поля часть его которая является буквами, а не какими то знаками или цифрами  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Raoul
evgenybe
Как выбрать все записи, в которых в какой-то позиции в поле Rus имеются ивритские буквы? Причем они не обязательно первыми стоят.

SELECT * FROM  RootHeb WHERE PATINDEX(N'%[א-ת]%', Rus)>0;
SELECT * FROM  RootHeb WHERE Rus LIKE N'%[א-ת]%';
Только надо осторожнее с диапазоном ([א-ת]).
Зависит от COLLATION. Некоторые символы могут и не попадать в него.
Правда, сужу по русскому языку. Надёжнее все символы перечислить явно.
28 июл 11, 21:08    [11041910]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить