Я не знаю, зачем вам это нужно, но вы можете попытаться разделить свое выражение на 2 строки и связать их позже. Вы уверены, что нет другого способа проверить ваш ввод? Как уже существующая библиотека или что-то в этом роде.
Itzik Ben-Gan в Вычисления ДАТЫ И ВРЕМЕНИ, Часть 1 (Журнал SQL Server, февраль 2007) показывает три метода выполнения такого преобразования ( самый медленный к самому быстрому ; разница между вторым и третьим методом является небольшой):
SELECT CAST(CONVERT(char(8), GETDATE(), 112) AS datetime)
SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
SELECT CAST(CAST(GETDATE() - 0.50000004 AS int) AS datetime)
Ваша техника (бросающий к плавание ) предлагается читателем в апрельском выпуске журнала. По его словам, это имеет производительность, сопоставимую с производительностью второй техники, представленной выше.
SQL Server 2008 имеет новое дата тип данных и это упрощает эту проблему до:
SELECT CAST(CAST(GETDATE() AS date) AS datetime)
Ваш CAST
- FLOOR
- CAST
уже, кажется, оптимальный путь, по крайней мере, на SQL Server MS 2005.
Некоторые другие решения, которые я видел, имеют преобразование строк, как Select Convert(varchar(11), getdate(),101)
в них, который медленнее фактором 10.