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

Откуда:
Сообщений: 1102
есть поле Nаme c данными, тип nvarchar. данные содержат знак " - " вот мне надо вывести символы до этого знака. например,
1. ggg-ddd-www - должно быть ggg
2. kkht-ss-wertyue121 - должно kkht
применяю функции LEFT и CHARINDEX, но остаётся сам знак "-".
select Name, LEFT(Name, CHARINDEX('-', Name))

тут выводится
1. ggg-
2. kkht-
но если к CHARINDEX добавить '-1', хоть в скобках, хоть за пределами
select Name, LEFT(Name, CHARINDEX('-', Name)-1)

то выдаётся синтаксич ошибка относительно функции LEFT. подскажите, как вывести символы или убрать '-'
2 дек 15, 19:50    [18504858]     Ответить | Цитировать Сообщить модератору
 Re: вывести первые симолы  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
seeerg_23
есть поле Nаme c данными, тип nvarchar. данные содержат знак " - " вот мне надо вывести символы до этого знака. например,
1. ggg-ddd-www - должно быть ggg
2. kkht-ss-wertyue121 - должно kkht
Надо полагать, в таблице есть записи, в которых в поле Name вообще нет знака "-". Что с ними делать? Вывести всё поле? Или NULL?
Если первое, то, например, так:
select Name, LEFT(Name, ISNULL(NULLIF(CHARINDEX('-', Name), 0)-1, LEN(Name))

А если второе, то можно так:
select Name, LEFT(Name, NULLIF(CHARINDEX('-', Name), 0)-1)

А если такие записи срезаются условием WHERE, то всё равно NULLIF лучше оставить, неизвестно в каком порядке сервер будет запрос выполнять.
2 дек 15, 20:31    [18504996]     Ответить | Цитировать Сообщить модератору
 Re: вывести первые симолы  [new]
seeerg_23
Member

Откуда:
Сообщений: 1102
Serg_77m,

нет, таких записей нет, все через тире !!
2 дек 15, 20:33    [18505002]     Ответить | Цитировать Сообщить модератору
 Re: вывести первые симолы  [new]
seeerg_23
Member

Откуда:
Сообщений: 1102
а если не использовать проверку на пустоту строк и учитывать только то, что ВСЕ данные имеют тире. то есть можно обойтись без использовать доп функций NULLIF и IFNULL. а почему тогда без низ выдаётся ошибка с -1 относительно LEFT ??
2 дек 15, 20:49    [18505088]     Ответить | Цитировать Сообщить модератору
 Re: вывести первые симолы  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
seeerg_23
а если не использовать проверку на пустоту строк и учитывать только то, что ВСЕ данные имеют тире. то есть можно обойтись без использовать доп функций NULLIF и IFNULL. а почему тогда без низ выдаётся ошибка с -1 относительно LEFT ??
Текст ошибки какой?
Можно убрать LEFT и посмотреть, что выдаёт CHARINDEX('-', Name)
3 дек 15, 08:54    [18505935]     Ответить | Цитировать Сообщить модератору
 Re: вывести первые симолы  [new]
Glory
Member

Откуда:
Сообщений: 104751
seeerg_23
то выдаётся синтаксич ошибка относительно функции LEFT.

Синтаксические ошибки выявляются ДО выполнения.
И исправляются правильным написанием текста запроса.
3 дек 15, 09:56    [18506196]     Ответить | Цитировать Сообщить модератору
 Re: вывести первые симолы  [new]
o-o
Guest
Glory
seeerg_23
то выдаётся синтаксич ошибка относительно функции LEFT.

Синтаксические ошибки выявляются ДО выполнения.
И исправляются правильным написанием текста запроса.

У него ошибка вылазит во время выполнения,
Навроде incorrect parameter passed to left or substring function.
Это вылазит в строках, где тире нет и в ф-цию передается -1.
Трлько меня не спрашивайте, почему он это назвал синтаксической ошибкой :)
3 дек 15, 10:46    [18506610]     Ответить | Цитировать Сообщить модератору
 Re: вывести первые симолы  [new]
Glory
Member

Откуда:
Сообщений: 104751
o-o
У него ошибка вылазит во время выполнения,
Навроде incorrect parameter passed to left or substring function.

Это - НЕ синтаксическая ошибка

o-o
Трлько меня не спрашивайте, почему он это назвал синтаксической ошибкой :)

Потому что ТС вместо копи-пейста оригинальных сообщений занимается пересказами своих ощущений от работы программного кода.
3 дек 15, 10:50    [18506644]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить