Хорошо, перечитав это, вы увидите, что вместо этого вам нужно сделать следующее:
AND CAST(SUBSTRING(TRANSACTIONS_HD.TRANS_DATE), 7, 4)
+ SUBSTRING(TRANSACTIONS_HD.TRANS_DATE), 4, 2)
+ SUBSTRING(TRANSACTIONS_HD.TRANS_DATE), 1, 2)
+ SUBSTRING(TRANSACTIONS_HD.TRANS_DATE), 12, 5)
+ ':00' AS datetime2) > '$from'
AND CAST(SUBSTRING(TRANSACTIONS_HD.TRANS_DATE), 7, 4)
+ SUBSTRING(TRANSACTIONS_HD.TRANS_DATE), 4, 2)
+ SUBSTRING(TRANSACTIONS_HD.TRANS_DATE), 1, 2)
+ SUBSTRING(TRANSACTIONS_HD.TRANS_DATE), 12, 5)
+ ':00' AS datetime2) < '$to'
Wi sh, что было проще. (Использование псевдонима для таблицы сделает ее менее плотной)
На SQL сервере обратите внимание, что ваши $ from и $ to должны быть просто строками в формате «ГГГГММДД», например, «20201231». Это будет работать независимо от того, какой тип данных даты используется, а также независимо от языка и региональных настроек. Вы просто указываете их как строку, вам не нужно их приводить.
ПРИМЕЧАНИЕ. Я также предположил, что формат даты в вашей таблице - ДД-ММ-ГГГГ, потому что я не могу сказать, какой Кстати, они взяты из ваших примеров. Если ваш местный формат даты - ММ-ДД-ГГГГ (т.е. даты в США), используйте вместо этого этот код:
AND CAST(SUBSTRING(TRANSACTIONS_HD.TRANS_DATE), 7, 4)
+ SUBSTRING(TRANSACTIONS_HD.TRANS_DATE), 1, 2)
+ SUBSTRING(TRANSACTIONS_HD.TRANS_DATE), 4, 2)
+ SUBSTRING(TRANSACTIONS_HD.TRANS_DATE), 12, 5)
+ ':00' AS datetime2) > '$from'
AND CAST(SUBSTRING(TRANSACTIONS_HD.TRANS_DATE), 7, 4)
+ SUBSTRING(TRANSACTIONS_HD.TRANS_DATE), 1, 2)
+ SUBSTRING(TRANSACTIONS_HD.TRANS_DATE), 4, 2)
+ SUBSTRING(TRANSACTIONS_HD.TRANS_DATE), 12, 5)
+ ':00' AS datetime2) < '$to'