Напечатайте предложение с указанием дня года с помощью SQL Server [решено] - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь написать это, используя SQL SERVER:

"Привет! Сегодня ... Это число дня ... года. Канун Нового года в ...дней».

Мой код работает без проблем, но я также не могу печатать.Что я делаю неправильно?Я не закончил всю фразу, потому что мне нужно решить проблему, прежде чем я перейду к последней части.

DECLARE
    @currentDate DateTime
        SET @currentDate = GETDATE();

DECLARE @dayofyear datetime
SET @dayofyear=DATEDIFF(day,STR(YEAR(@dayofyear),4)+'0101',@dayofyear)+1
-- SELECT Numbertoday = DATEDIFF(day,STR(YEAR(@dayofyear),4)+'0101',@dayofyear)+1

print('Hi! Today is '+ CONVERT(VARCHAR(10), @currentDate , 111) + '. ' + 'This is the day number '+ ' ' +  CONVERT (VARCHAR(10), @dayofyear) + of the year.')   

Решение:


DECLARE
    @currentDate DateTime
        SET @currentDate = GETDATE();

DECLARE
    @dayofyear DateTime
        SET @dayofyear = GETDATE();

    SELECT CONCAT('Hello! Today is ', CONVERT(VARCHAR(10), @currentDate , 111), '. It is the day ',
    DATEDIFF(day,STR(YEAR(@dayofyear),4)+'0101',@dayofyear)+1, 'Of the year. New years eve is in ',
              365 - DATEDIFF(day,STR(YEAR(@dayofyear),4)+'0101',@dayofyear)+1, ' days.' + ' ')

Ответы [ 4 ]

1 голос
/ 05 июля 2019

Другой способ сделать это:

    declare @today varchar(11) = convert(varchar(11), getdate(), 1);

    declare @dayOfTheYear int = datepart(DAYOFYEAR, getdate());

    declare @untilNewYearsEve int = datepart(dayofyear, datefromparts(year(getdate()), 12, 31)) - @dayOfTheYear

   -- if you use print, you should see the result under the 'messages' tab not in the 'results' tab in SSMS
    print 'Hi! Today is '+ @today + '. ' + 'This is the day number '+ cast( @dayOfTheYear as varchar(3)) +  '. New year''s eve is in '+ 
    cast (@untilNewYearsEve as varchar(3)) + ' days.'
0 голосов
/ 05 июля 2019

Вы можете немного упростить задачу, используя параметр DAYOFYEAR в функции DATEPART, если используете SQL 2008 и выше.И вам не нужно объявлять переменную для даты.

Пример кода:

print('Hi! Today is '+ convert(varchar(10), getdate() , 111) + '. ' +  'This is the day number' + ' ' + convert(varchar, datepart(dayofyear, getdate()))) + ' of the year.'

Результаты:

Hi! Today is 2019/07/05. This is the day number 186 of the year.
0 голосов
/ 05 июля 2019

Просто для удовольствия, вы можете использовать concat()

Пример

Print concat('Hi! Today is '
           ,format(GetDate(),'dddd, MMM d, yyyy.')
           ,'  This is the day number '
           ,DateDiff(DAY,datename(YEAR,getdate())+'0101',getdate()) + 1
           ,' of the year.'
           )   

Результаты

Hi! Today is Thursday, Jul 4, 2019.  This is the day number 185 of the year.
0 голосов
/ 05 июля 2019
This should work perfectly fine. 
while seeting the day of year you need to put @current date so it will work because you are trying to get a day from a @currentdate

    DECLARE
        @currentDate DateTime
            SET @currentDate = GETDATE();

    DECLARE @dayofyear datetime
    SET @dayofyear=DATEDIFF(day,STR(YEAR(@currentDate),4)+'0101',@currentDate)+1


    print('Hi! Today is '+ CONVERT(VARCHAR(10), @currentDate , 111) + '. ' + 'This is the day number '+ ' ' +  CONVERT (VARCHAR(10), @dayofyear) + 'of the year.')  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...