как получить тип данных каждой строки в столбце

#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'