Как передать переменную даты и времени в строку SQL в правильном формате?

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

Моя проблема: у меня есть 2 переменные, которые возвращают дату и время, то есть 2019-04-01 00:00:00.000, я пытаюсь добавить эти переменные в строку SQL, но когда я это делаю, формат теряется, и он преобразуется в это: 1 апреля 2019 г., 00: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. Что я делаю неправильно?

Вы используете динамический SQL? Из ваших вопросов не ясно, что вы пытаетесь сделать. В любом случае, если вам нужно отформатировать дату и время как строку, просто проверьте справочные документы, для какого формата вам нужен docs.microsoft.com/en-us/sql/t-sql/functions/…

Dale K 10.04.2019 05:14

какая-то причина, по которой вам нужно использовать dynamic query?

Squirrel 10.04.2019 05:15

Я использую динамический запрос, чтобы уменьшить код строки sql, потому что позже я выполняю условие if, в котором я добавляю результат переменной @InvoiceTrue к другой строке sql.

Samayoa 10.04.2019 14:05

Плохая привычка, от которой нужно избавиться — объявление строк без указания длины (например, «cast (... as varchar)».

SMor 10.04.2019 14:25

Плохие привычки, от которых нужно избавиться - приведение даты (и связанных типов данных) к varchar без стиля приведет к непоследовательному выводу, поскольку он зависит от настроек среды выполнения. Поэтому всегда указывайте стиль, который можно правильно интерпретировать в зависимости от вашей цели. Прочтите подробное обсуждение тип данных даты и времени Тибором здесь - да ПРОЧИТАЙТЕ - нет tl/dr.

SMor 10.04.2019 14:26

Спасибо, Смор, теперь буду иметь это в виду :)

Samayoa 10.04.2019 14:44
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
6
2 105
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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/дата-и-время-преобразования-использование-sql-сервера/

Большое спасибо, я заменил бросок на convert плюс счетчик и возвращаю нужные мне данные. Я просто получаю сообщение об ошибке: Незакрытые кавычки после строки символов ''.

Samayoa 10.04.2019 14:39

Другие вопросы по теме