#sql-server
Вопрос:
Мне нужно знать тип данных каждого столбца в столбце.
Источник:
выход:
заранее спасибо
Комментарии:
1. Вы имеете в виду тип данных каждого столбца в таблице, он будет одинаковым для всех строк.
2. У строк нет типов данных, у столбцов есть. все значения в одном столбце имеют один и тот же тип данных. Для ваших данных в таблице SQL каждое значение будет иметь значение an
(n)(var)char
.3. Интересно, потому что я не голосовал за это как за обман, но, как неясно, это выглядит так, как будто я голосовал за обман, но не ставил рядом с ним свой золотой значок (так как это происходит только тогда, когда я обманываю). Это выглядит … Странно.
4. Очевидно, что столбец является строкой, но похоже, что OP хочет определить/уточнить тип. Ссылка на обман не подходит.
5. Я не согласен с тем, что это не обман, @JohnCappelletti (и почему я прямо заявил, что не обманывал голосование), но я не согласен с повторным открытием. Это так же ясно, как грязь. «Типы данных» строки не имеют смысла; строка не имеет типа данных, который имеет столбец . И из «типов данных», которые они перечислили, только
numeric
фактический тип данных.
Ответ №1:
Использование try_convert()
совместно с CASE
(или двумя)
Declare @YourTable Table ([column] varchar(50))
Insert Into @YourTable Values
('Abc')
,('123')
,('Adc123')
,('456')
,('45adb')
,('25.25')
Select *
,[output] = case when try_convert(money,[column]) is null
then 'alpha' case when patindex('%[0-9]%',[column])>0 then 'numeric' else '' end
else 'numeric' end
From @YourTable
Результаты
column output
Abc alpha
123 numeric
Adc123 alphanumeric
456 numeric
45adb alphanumeric
25.25 numeric
Примечание: Я использую money
, потому что это, как правило, немного более снисходительно.
Комментарии:
1. Как я могу написать тот же запрос без Patindex ?
Ответ №2:
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'MySchema' -- default is dbo
AND TABLE_NAME = 'MyTable'