Как передать переменную datetime в строку SQL в правильном формате? - PullRequest
0 голосов
/ 10 апреля 2019

Я работаю в SQL Server 2014 Management Studio со сценариями SQL.

Моя проблема: у меня есть 2 переменные, которые возвращают дату и время, т.е. 2019-04-01 00: 00: 00.000, я пытаюсь добавить эти переменные в строку SQL, но когда я делаю это, формат теряется, и он конвертируется на это: 1 апреля 2019 12:00. Дата в этом формате не работает в моем сценарии SQL

Я пробовал несколько кодов преобразования и приведения, но это не работает вообще, вот что я получаю по переменной @InvoiceTrue:

left join table1 payment on l.LedgerID = payment.LedgerID
left join table2 i on payment.InvoiceID = i.InvoiceID
where l.BusinessDate between 'Apr  1 2019 12:00AM' and 'Apr  7 2019 12:00AM' 
order by l.LedgerID

Если вы посмотрите выше, формат даты и времени теряется.

Это мой код SQL:

Declare
    @innerBeginDate datetime = '2019-04-01'
,   @innerEndDate datetime = '2019-04-07'
,   @InvoiceTrue varchar(max)

Select @InvoiceTrue = N'
    left join table1 payment on l.LedgerID = payment.LedgerID
    left join table2 i on payment.InvoiceID = i.InvoiceID
    where l.BusinessDate between ''' +  CAST(@innerBeginDate as varchar) + ''' and ''' + CAST(@innerEndDate as varchar) + ''' order by l.LedgerID'''

select @InvoiceTrue

Мне нужно сохранить тот же формат даты и времени после передачи параметра в строку, чтобы он всегда был 2019-04-01 00: 00: 00.000. Что я делаю не так?

1 Ответ

0 голосов
/ 10 апреля 2019

Вы можете использовать следующее:

DECLARE @date DATETIME = '2019-04-01'
select convert(varchar, @date, 13);  

Output is: 01 Apr 2019 00:00:00:000

Если вы хотите увидеть различные форматы преобразования в действии, вы можете использовать следующий фрагмент:

DECLARE @counter INT = 0
DECLARE @date DATETIME = '2019-04-01'

CREATE TABLE #dateFormats (dateFormatOption int, dateOutput varchar(40))

WHILE (@counter <= 150 )
BEGIN
   BEGIN TRY
      INSERT INTO #dateFormats
      SELECT CONVERT(varchar, @counter), CONVERT(varchar,@date, @counter) 
      SET @counter = @counter + 1
   END TRY
   BEGIN CATCH;
      SET @counter = @counter + 1
      IF @counter >= 150
      BEGIN
         BREAK
      END
   END CATCH
END

SELECT * FROM #dateFormats;

Ссылка: https://www.mssqltips.com/sqlservertip/1145/date-and-time-conversions-using-sql-server/

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