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

Откуда: Germany
Сообщений: 46
Всем привет, не могу разобраться как проверить user-id.
Есть таблица в БД:

id | group | modus | value
guid | guid | nvarchar | nvarchar

пример:

id | group | modus | value
(id) | (group-Id) | user | 472; мпетров

где 472 - это user-id

пробовала:
select * from [table] where modus = 'user' and cast(ltrim(rtrim(substring(value, 1,3))) as int) = '472';

этот запрос работает только в том случает, если user-id трёхначный, для всех остальных выдаёт ошибку.
Как мне сделать по другому, чтоб он проверял user-id любого значения?

Всем заранее спасибо.
20 июн 14, 17:33    [16197014]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в mssql  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ekanikol
Как мне сделать по другому, чтоб он проверял user-id любого значения?

А как сервер поймет, где в 472; мпетров начинается и где заканчивается user-id ?
20 июн 14, 17:35    [16197023]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в mssql  [new]
Ekanikol
Member

Откуда: Germany
Сообщений: 46
Glory, не знаю, как ему это объяснить, в том то и дело. Я так поняла, что функции Split() тут не существует. Поэтому как-то ведь по-другому можно сделать, а как...?
20 июн 14, 17:38    [16197035]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в mssql  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Ekanikol
Glory, не знаю, как ему это объяснить, в том то и дело. Я так поняла, что функции Split() тут не существует. Поэтому как-то ведь по-другому можно сделать, а как...?
Вы сначла себе и нам объясните, а потом уже за сервер браться можно будет.
20 июн 14, 17:39    [16197037]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в mssql  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ekanikol
как ему это объяснить, в том то и дело.

Объясните сначала самому себе. На словах
20 июн 14, 17:40    [16197038]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в mssql  [new]
Ekanikol
Member

Откуда: Germany
Сообщений: 46
ну по идее user-id заканчивается перед ";"
20 июн 14, 17:43    [16197056]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в mssql  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Ekanikol
ну по идее user-id заканчивается перед ";"


попробуйте

SUBSTRING(value, PATINDEX('%;%') + 1, 999)
20 июн 14, 18:10    [16197160]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в mssql  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Ekanikol
ну по идее user-id заканчивается перед ";"


или неверное

SUBSTRING(value, 1, PATINDEX('%;%') - 1)
20 июн 14, 18:12    [16197164]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в mssql  [new]
Ekanikol
Member

Откуда: Germany
Сообщений: 46
супер, спасибо большое, только там не хватало второго аргумента
SUBSTRING(value, 1, PATINDEX('%;%', value) - 1)
20 июн 14, 18:17    [16197188]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в mssql  [new]
Ekanikol
Member

Откуда: Germany
Сообщений: 46
a_voronin, а что значит -1 в конце?
20 июн 14, 18:20    [16197201]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в mssql  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Ekanikol
а что значит -1 в конце?
это значит вычесть один
20 июн 14, 18:23    [16197213]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в mssql  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Ekanikol
a_voronin, а что значит -1 в конце?
А вы попробуйте
а) без нее
б) на данных, где нет ";"
20 июн 14, 18:23    [16197215]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в mssql  [new]
Ekanikol
Member

Откуда: Germany
Сообщений: 46
не пойму, это получается я делю данные на две части до и после ";" и беру левую, тобишь первую, поэтому -1?
20 июн 14, 18:28    [16197231]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в mssql  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Ekanikol
не пойму, это получается я делю данные на две части до и после ";" и беру левую, тобишь первую, поэтому -1?


SELECT SUBSTRING(value, 1, PATINDEX('%;%', VALUE) - 1), PATINDEX('%;%', VALUE)
FROM (SELECT '424;sfs' AS VALUE) A


------- -----------
424 4

(1 row(s) affected)
20 июн 14, 18:35    [16197266]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в mssql  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Ekanikol,

прочитайте в хелпе про функцию SUBSTRING, всё станет понятно ;)
20 июн 14, 18:37    [16197273]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в mssql  [new]
Ekanikol
Member

Откуда: Germany
Сообщений: 46
Ruuu, aа, это я длину указываю и с помощью (-1) убираю знак ";"?
Я знаю, что вопросы глупые, но если я их не буду задавать, то я так и останусь глупой)))
20 июн 14, 18:49    [16197321]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить