powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проверка на допустимость приведения типов
25 сообщений из 36, страница 1 из 2
Проверка на допустимость приведения типов
    #38673895
mletov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пожалуйста, подскажите:
В C# есть конструкция is, при помощи которой можно проверить допустимость приведения значения к тому или иному типу.
Хотелось бы знать, есть ли что-нибудь аналогичное в sql.
Суть задачи в чем, есть поле типа VARCHAR(10)

И нужно что-то вроде этого

SELECT (CASE
WHEN FieldName IS INT
THEN CAST(FieldName AS INT)
ELSE 0
END) AS FieldRes
FROM Table
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38673900
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38673905
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mletov,

Вы совершенно не понимаете смысл оператора is.
В T-SQL нет наследования.

Зато есть TRY_CAST (Transact-SQL)
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38673961
mletov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory, iap

Спасибо, то, что нужно:)
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38674624
Dmitry V. Liseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понимаю, что это есть только в 2012, а в остальных надо перехватывать исключение при помощи TRY и CATCH?
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38674673
mletov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry V. Liseev,

Да, к сожалению, это так

но для моей задачи меня выручили эти темы
http://www.sql.ru/forum/1001529/kak-proverit-chislo?mid=13861719#13861719
http://www.sql.ru/forum/1045426/analog-try-cast-v-2008
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38674682
Dmitry V. Liseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mletovDmitry V. Liseev,

Да, к сожалению, это так

но для моей задачи меня выручили эти темы
http://www.sql.ru/forum/1001529/kak-proverit-chislo?mid=13861719#13861719
http://www.sql.ru/forum/1045426/analog-try-cast-v-2008 Я тоже видел подобные темы. Впечатлился масштабами хакерского кода. Вспомнил бритву Оккама. Вздохнул. И написал
Код: sql
1.
BEGIN TRY SET @Number = @NumberText; END TRY BEGIN CATCH END CATCH;
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38674688
Фотография daw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry V. LiseevЯ тоже видел подобные темы. Впечатлился масштабами хакерского кода. Вспомнил бритву Оккама. Вздохнул. И написал
Код: sql
1.
BEGIN TRY SET @Number = @NumberText; END TRY BEGIN CATCH END CATCH;



только вот, в функциях так нельзя.
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38674689
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry V. LiseevЯ тоже видел подобные темы. Впечатлился масштабами хакерского кода. Вспомнил бритву Оккама. Вздохнул. И написал
Код: sql
1.
BEGIN TRY SET @Number = @NumberText; END TRY BEGIN CATCH END CATCH;


это если не нужна именно функция
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38674692
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry V. Liseev,

с использованием внутри select у бритвы Оккама будут проблемы
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38674721
Dmitry V. Liseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dawDmitry V. LiseevЯ тоже видел подобные темы. Впечатлился масштабами хакерского кода. Вспомнил бритву Оккама. Вздохнул. И написал
Код: sql
1.
BEGIN TRY SET @Number = @NumberText; END TRY BEGIN CATCH END CATCH;



только вот, в функциях так нельзя.Нельзя.
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38674748
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для 2005 - 2008R2 можно вот так извратиться:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
use tempdb;
go

create function dbo.ConvertStringToInt
(
 @Value varchar(10)
)
returns int
as
begin
 declare @x xml;

 select @x = (select @Value for xml path('Value'));
 return cast(nullif(cast(@x.query('xs:int(/Value[1])') as varchar(10)), '') as int);
end;
go

select
 dbo.ConvertStringToInt('-1'),
 dbo.ConvertStringToInt('2147483647'),
 dbo.ConvertStringToInt('2147483648'),
 dbo.ConvertStringToInt('aaa');
go

drop function dbo.ConvertStringToInt;
go
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38675034
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mletovПожалуйста, подскажите:
В C# есть конструкция is, при помощи которой можно проверить допустимость приведения значения к тому или иному типу.
Хотелось бы знать, есть ли что-нибудь аналогичное в sql.
Суть задачи в чем, есть поле типа VARCHAR(10)

И нужно что-то вроде этого

SELECT (CASE
WHEN FieldName IS INT
THEN CAST(FieldName AS INT)
ELSE 0
END) AS FieldRes
FROM TableО, ужас!.. :)
Сколько помню MSSQL, всегда было ISNUMERIC

ЗЫ. Аналогичное было для проверки даты - ISDATE
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38675053
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mvО, ужас!.. :)
Сколько помню MSSQL, всегда было ISNUMERIC И что же означает 1, которую возвращает ISNUMERIC(), по-Вашему?
Этого достаточно, да?
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38675106
Фотография Ruuu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mvСколько помню MSSQL, всегда было ISNUMERIC

Код: sql
1.
SELECT ISNUMERIC('$178'), ISNUMERIC('+'), ISNUMERIC(','), ISNUMERIC('.'), ISNUMERIC('12d0')
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38675114
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapsphinx_mvО, ужас!.. :)
Сколько помню MSSQL, всегда было ISNUMERIC И что же означает 1, которую возвращает ISNUMERIC(), по-Вашему?
Этого достаточно, да?Для проверки допустимости конвертации - да.
Тем более, что очень не все уже перешли хотя бы на 2012 версию SQL.
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38675118
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что не так с ISNUMERIC()? Эта функция как раз проверяет возможность конвертирования строки в числовой формат.
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38675119
Ruuusphinx_mvСколько помню MSSQL, всегда было ISNUMERIC

Код: sql
1.
SELECT ISNUMERIC('$178'), ISNUMERIC('+'), ISNUMERIC(','), ISNUMERIC('.'), ISNUMERIC('12d0')



а также еще
Код: sql
1.
SELECT ISNUMERIC('3e8'), ISNUMERIC('-')


:)
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38675121
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не то, о чем все думают
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38675122
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sphinx_mviapпропущено...
И что же означает 1, которую возвращает ISNUMERIC(), по-Вашему?
Этого достаточно, да?Для проверки допустимости конвертации - да.
Тем более, что очень не все уже перешли хотя бы на 2012 версию SQL.
т.е. что-то типа?

Код: sql
1.
2.
3.
4.
declare 
  @f varchar(10) = '100'
declare 
  @f_int int = case when isnumeric(@f) = 1 then cast(f as int) else null end
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38675134
msLexsphinx_mvпропущено...
Для проверки допустимости конвертации - да.
Тем более, что очень не все уже перешли хотя бы на 2012 версию SQL.
т.е. что-то типа?

Код: sql
1.
2.
3.
4.
declare 
  @f varchar(10) = '100'
declare 
  @f_int int = case when isnumeric(@f) = 1 then cast(f as int) else null end


Select забыли.
А вы прочитали что вам написали чуть повыше про isnumeric()?
Если вас это устраивает, то в путь...
Но тогда лучше так:

Код: sql
1.
2.
3.
4.
declare
  @f varchar(10) = '100'
declare  
  @f_int int = nullif(isnumeric(@f), 0)
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38675135
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовА что не так с ISNUMERIC()? Эта функция как раз проверяет возможность конвертирования строки в числовой формат.
"Число ли это?" и "Можно ли это сконвертировать в INT?" - это совершенно разные вопросы ;)
Как минимум, IsNumeric не поймает переполнение (не говоря уже про упоминавшиеся выше записи с плавающей точкой и т.п.)
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38675137
ааа, и еще :)
isnumeric() это не только int.
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38675142
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
случайно заглянул
Код: sql
1.
2.
3.
4.
declare
  @f varchar(10) = '100'
declare  
  @f_int int = nullif(isnumeric(@f), 0)



что за бред вы написали? где здесь конвертация сроки '100' к числу 100?


случайно заглянулА вы прочитали что вам написали чуть повыше про isnumeric()?
а вы почитали
1. кому написали про isnumeric?
2. кому я написал по isnumeric?
...
Рейтинг: 0 / 0
Проверка на допустимость приведения типов
    #38675149
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовА что не так с ISNUMERIC()? Эта функция как раз проверяет возможность конвертирования строки в числовой формат.только вы не знаете в какой. для строки '-$' вернет 1, т.к. можно конвертировать в (small)money и только, а для '3e8' - потому что можно в float, но не money или int.
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проверка на допустимость приведения типов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]