Задать предыдущий месяц как значение по умолчанию в формате «ммм» в SQL Server? - PullRequest
0 голосов
/ 07 октября 2019

Я хочу создать временную таблицу, где периодом всегда будет аббревиатура предыдущего месяца. Например, сегодня значением по умолчанию будет «Sep».

У меня есть этот код, но он выдает ошибки после попытки добавить другие значения в таблицу:

create table tmp_hfm 
( 
    Entity_Code nvarchar(15),
    HFM_Account nvarchar(15),
    HFM_Segment nvarchar(15),
    Period date default format(month(getdate()) - 1, 'mmmm')
)

Ошибка, которую я получаю:

Не удалось выполнить преобразование при преобразовании даты и / или времени из строки символов.

Может ли кто-нибудь посоветовать это, пожалуйста?

Ответы [ 2 ]

1 голос
/ 07 октября 2019

Попробуйте это:

CREATE TABLE tmp_hfm (
  Entity_Code NVARCHAR(15),
  HFM_Account NVARCHAR(15),
  HFM_Segment NVARCHAR(15),
  Period CHAR(3) DEFAULT FORMAT(DATEADD(MONTH, -1, GETDATE()), 'MMM')
);

Если вам нужно указать культуру, вы можете добавить еще один параметр после 'MMM':

CREATE TABLE tmp_hfm (
  Entity_Code NVARCHAR(15),
  HFM_Account NVARCHAR(15),
  HFM_Segment NVARCHAR(15),
  Period CHAR(3) DEFAULT FORMAT(DATEADD(MONTH, -1, GETDATE()), 'MMM', 'en-us')
);

Вот для вас SQL Fiddle: ссылка

0 голосов
/ 07 октября 2019

Я не понимаю, что вы хотите сделать. Вы определили Period как столбец date. FORMAT() возвращает строку. Они не совместимы.

Возможно, вы хотите, чтобы period было char(3), со значением по умолчанию format(dateadd(month, -1, getdate()), 'MMM').

Для "Sep" я был бы склонен использовать left(datename(month, dateadd(month, -1, getdate())), 3), если у вас нет причин для предпочтения интернационализации format().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...