Избегайте даты по умолчанию (январь 1900) в столбце sql server varchar
У меня есть таблица опыта в моей базе данных SQL Server, имеющей следующие столбцы:
exp_id int,
u_id int ,
exp_jobtitle varchar(100),
exp_company varchar(100),
exp_startdate date,
exp_enddate varchar(50),
exp_working varchar(50),
exp_description varchar(2000),
Если я сейчас работаю над этим конкретным заданием, то в столбец exp_enddate ничего не вставляется, а в столбец exp_working в настоящее время работает.
И во внешнем интерфейсе я показываю такой результат:
Если моя работа закончена май 2015 - июнь 2015, и проблема возникает, когда я работаю в настоящее время
Я хочу этот вывод May 2015 - Currently Working
И я получаю вывод, как это
May 2015 - Jan 1900Currently Working
С помощью этого запроса:-
select right(convert(varchar(50), cast('exp_enddate' as date), 106), 8)
Как я могу избежать этой даты по умолчанию или есть какой-либо другой способ получить желаемый результат?
May 2015 - Currently Working
2 ответа
Если вы имеете дело с пустой строкой для конечной даты, то SQL Server автоматически обработает ее как 01.01.1990.
Вы можете увидеть это, запустив следующий запрос:
SELECT CAST( '' AS DATE )
Это возвращает 1900-01-01
,
Что вы можете сделать, это проверить, является ли дата окончания пустой, и если это так, обработать ее как работающую в данный момент, например так:
SELECT
CASE
WHEN exp_enddate = ''
THEN 'Currently Working'
ELSE RIGHT( CONVERT( VARCHAR(50), CAST( exp_enddate AS DATE ), 106 ), 8 )
END
Это либо возвратит дату окончания в указанном вами формате, либо "в данный момент работает".
IF (@LeaseCancelProcessedDate = '')
BEGIN
SET @LeaseCancelProcessedDate = NULL
END
Здесь вы можете использовать этот синтаксис, в этом@LeaseCancelProcessedDate
это мое имя переменной, которое я использую для установки значения для моего столбца типаDateTime
. Изначально я тоже столкнулся с той же проблемой, но решил ее с помощью этого небольшого трюка.