2015-01-19 5 views
1

Невозможно преобразовать '' в метку времени.Почему я получаю сообщение об ошибке: cant convert '' to timestamp?

У меня есть «date_column» (тип даты) от ведьмы. Я хочу выбрать верхнюю 1 строку. У меня есть процедура, которая проходит через 10 таблиц, каждая таблица имеет столбец «date_column», и я хочу получить первую 1 дату из каждого столбца и создать представление, основанное на этой дате. Я попробовал с конвертирующим оператором и получал: cant convert '' к ошибке timestamp. Если я делаю @top_date (тип даты), я получаю преобразование can not to numeric на шаге создания представления, поэтому он должен быть varchar, я думаю.

declare @table_name varchar(100) 
declare @top_date varchar(20) 
declare @sql varchar(1000) 

select @table_name = 'random_name' 

select @top_date = (select top 1 convert(varchar(12),date_column,112) from @table_name) 

set @sql = ('create view top_view as select * from ' + @table_name + ' where date_column = '''+ @top_date +'''') 
execute @sql 

ответ

2

Как видно из сообщения об ошибке, вы не можете преобразовать пустую строку в дату и время. Я предполагаю, что ниже запрос получает пустую строку:

select top 1 convert(varchar(12),date_column,112) from @table_name 

Таким образом, чтобы получить выход, просто добавьте эту небольшую проверку.

where convert(varchar(12),date_column,112) <> '' 

FINAL CODE

declare @table_name varchar(100) 
declare @top_date varchar(20) 
declare @sql varchar(1000) 

select @table_name = 'random_name' 

select @top_date = (select top 1 convert(varchar(12),date_column,112) from @table_name where convert(varchar(12),date_column,112) <> '')

set @sql = ('create view top_view as select * from ' + @table_name + ' where date_column = '''+ @top_date +'''') 
execute @sql