TSQL лет ниже 1000 - PullRequest
       10

TSQL лет ниже 1000

1 голос
/ 07 ноября 2019

Я пытаюсь получить имя первого дня данного года. Это текущий код, с которым я тестирую.

DECLARE @myDate AS DATE
--SET @myDate = '0999-01-01' --DOESNT WORK
SET @myDate = '1000-01-01' -- WORKS
SELECT @myDate
DECLARE @date AS int = YEAR(@myDate)
SELECT @date
SET @date = CONCAT(CONCAT('0', @date), '0101')
SELECT DATEPART(dw, CONVERT(varchar,@DATE))

Я попытался объединить 0 в год, так как я думал, что это может быть неправильное взаимопроникновение года, однако возникает та же проблема.

Согласно Документации Microsoft Я должен быть в состоянии перейти к 1 году.

1 Ответ

1 голос
/ 07 ноября 2019

Это литерал даты:

SET @myDate = '1000-01-01' -- WORKS

Но это не одно и то же, потому что выходные данные функции не могут быть литералом даты:

SET @date = CONCAT(CONCAT('0', @date), '0101')

Выможно попытаться обернуть это в CONVERT, но лучший подход был бы:

SET @date = DATEFROMPARTS(@yearyouwant,1,1)

Между тем в этом бите нет ничего плохого, не знаю, почему вы говорите, что он не работает:

DECLARE @myDate as Date
SET @myDate = '0999-01-01'
PRINT @myDate

НО в вашем скрипте есть @date дважды с разными типами, один раз как int и один раз как дата, так что это не сработает.

В целом, я думаю, вы хотите что-то вроде

DECLARE @myDate AS DATE
SET @myDate = '1983-09-07' 
SELECT @myDate
DECLARE @yearValue AS int = YEAR(@myDate)
SELECT @yearValue
DECLARE @adjustedDate as DATE
SET @adjustedDate = DATEFROMPARTS(@yearValue,1,1)
SELECT DATEPART(dw, @adjustedDate)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...