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

Откуда: Москва
Сообщений: 1052
Здраствуйте!
Проблему в следующем.В запросе where пишу условие: field1 in (cast(04805516 as varchar(8))). Field1 типа varchar(8). Нет записей, хотя должно быть 4. Переписываю - field1 in (convert(varchar(8), 04805516)), та же ерунда. Но если написать field1 in ('04805516'), то будет все ок! В чем причина.
5 дек 03, 12:14    [448268]     Ответить | Цитировать Сообщить модератору
 Re: конвертация данных  [new]
Hel975
Member

Откуда: Москва
Сообщений: 1052
Я так понял, что пропадает 0. Как его сохранить?
5 дек 03, 12:14    [448269]     Ответить | Цитировать Сообщить модератору
 Re: конвертация данных  [new]
Glory
Member

Откуда:
Сообщений: 104760
Что же тут непонятного. 04805516 - это ЧИСЛО. А у числа не может быть ведущих 0-ей

field1 in (right('00000000'+cast(04805516 as varchar(8)), 8)).
5 дек 03, 12:18    [448277]     Ответить | Цитировать Сообщить модератору
 Re: конвертация данных  [new]
JibSkeart
Member

Откуда: Из далекой галактики
Сообщений: 19870
а если попробовать in ('0'+cast(04805516 as varchar(8)))

_____________
Картинка с другого сайта.
5 дек 03, 12:20    [448281]     Ответить | Цитировать Сообщить модератору
 Re: конвертация данных  [new]
JibSkeart
Member

Откуда: Из далекой галактики
Сообщений: 19870
опередили :))

хотя вроде по мойму бкдет не корректно ,хотя не проверял :)
_____________
Картинка с другого сайта.
5 дек 03, 12:21    [448283]     Ответить | Цитировать Сообщить модератору
 Re: конвертация данных  [new]
Hel975
Member

Откуда: Москва
Сообщений: 1052
2 JibSkeart,
у меня числа вставляются автоматически и возможен случай когда будет 00632178
5 дек 03, 12:22    [448288]     Ответить | Цитировать Сообщить модератору
 Re: конвертация данных  [new]
Hel975
Member

Откуда: Москва
Сообщений: 1052
2 Glory
Thanks
5 дек 03, 12:24    [448298]     Ответить | Цитировать Сообщить модератору
 Re: конвертация данных  [new]
Hel975
Member

Откуда: Москва
Сообщений: 1052
2 Glory

хм, а если у меня в полях есть значения, например, такие 04443, т.е. которые содаржат меньше 8 символов, то что делать?
5 дек 03, 12:43    [448350]     Ответить | Цитировать Сообщить модератору
 Re: конвертация данных  [new]
Glory
Member

Откуда:
Сообщений: 104760
не совсем понятно - откуда у вас в запросе берутся эти 04805516, 04443 и тд.
5 дек 03, 12:47    [448364]     Ответить | Цитировать Сообщить модератору
 Re: конвертация данных  [new]
Hel975
Member

Откуда: Москва
Сообщений: 1052
из таблицы. у меня хр. процедура, которая формирует запрос и потом его выполняет.
5 дек 03, 12:48    [448369]     Ответить | Цитировать Сообщить модератору
 Re: конвертация данных  [new]
Glory
Member

Откуда:
Сообщений: 104760
Как у вас в таблице в числовом поле может храниться 04805516 - расскажите мне.
5 дек 03, 12:52    [448377]     Ответить | Цитировать Сообщить модератору
 Re: конвертация данных  [new]
Hel975
Member

Откуда: Москва
Сообщений: 1052
естественно у меня в поле типа varchar(8). В хр процедуру передается стока @par varchar(500), в которой через запятую перечислены числа. В хр. процедуре я формирую запрос set @a = 'select ... from... where field1 in ()'. Так вот мы просто переменную @par туда засунуть не можем, т.к. она воспринимается как одна строка. Соответственно я выполняю следующий цикл:

DECLARE @tmp varchar(4000), @pos int

IF @par <> ''
BEGIN
SET @pos = charindex(',', @par)
SET @tmp = ''
WHILE @pos > 0
BEGIN
if @tmp <> '' set @tmp = @tmp + ', '
set @tmp = @tmp + 'CAST(' + ltrim(rtrim(left(@par, @pos - 1))) + ' AS VARCHAR(8))'
set @par = substring(@par, @pos + 1, len(@par))
set @pos = charindex(',', @par)
END

if @par <> ''
BEGIN
if @tmp <> '' set @tmp = @tmp + ', '
set @tmp = @tmp + 'CAST('+ltrim(rtrim(@par))+' AS VARCHAR(8))'
END

set @par = @tmp

print @par
print ''

END -- if @par

А уже потом я переменную @par вставляю в запрос.
Если есть более приемлемый способ решить задачу, то подскажите.
5 дек 03, 14:38    [448752]     Ответить | Цитировать Сообщить модератору
 Re: конвертация данных  [new]
Glory
Member

Откуда:
Сообщений: 104760
1. cast(field1 as int) in (04805516, 04443)

2.
https://www.sql.ru/articles/mssql/03060701ArraysAndListsInSQLServer.shtml
5 дек 03, 14:52    [448791]     Ответить | Цитировать Сообщить модератору
 Re: конвертация данных  [new]
Hel975
Member

Откуда: Москва
Сообщений: 1052
1. Выдает ошибку конвертации данных:
Server: Msg 245, Level 16, State 1, Line 1
Syntax error converting the varchar value ')' to a column of data type int.

Видимо кто базу забивал пихал все что вздуется в это поле. :-(

2. Читал, но не конца, как всегда времени нет. Собственно этот кусок кода и был оттуда взят.
5 дек 03, 15:07    [448843]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить