Как сделать преобразования от varchar до даты и времени детерминированными?

= для назначения: для определения типа

, однако, когда вы используете его в качестве параметра в функции

fun foo(noise : String = "Wroom Wroom ")

, шум является вашей переменной [113 ]

Строка - это ваш тип (определяется как : )

= "Wroom Wroom" - значение по умолчанию

7
задан Community 23 May 2017 в 11:48
поделиться

2 ответа

BOL заявляет это CONVERT детерминировано с datetimes, если параметр стиля указан. Таким образом, если Вы изменяете первый UDF на:

RETURN CONVERT(datetime, CONVERT(varchar, @DATA_DT_ID), 112)

Затем это должно быть детерминировано, если я понимаю документы правильно.

По-видимому, тот же прием мог использоваться в Вашем втором UDF:

IF @DateTimeIn < CONVERT(datetime, '1/1/1900', 101)
    RETURN CONVERT(datetime, '1/1/1900', 101)

Мне действительно жаль, что не было способа указать литералы даты и времени в T-SQL.

Править:

Как указано Arvo в комментариях (спасибо, Arvo), формат литерала метки времени ODBC может использоваться (даже когда с помощью OLE DB), таким образом, вторая функция выше могла быть лучше записана как:

IF @DateTimeIn < {d '1900-01-01'}
    RETURN {d '1900-01-01'}
...etc.

и преобразование в дату и время сделано во время компиляции вместо времени выполнения. Обратите внимание, что формат даты должен быть очень конкретным (см. ссылку Arvo на тип данных datetime):

 d    yyyy-mm-dd
 t    hh:mm:ss [.fff]
ts    yyyy-mm-dd hh:mm:ss [.fff]

7
ответ дан 6 December 2019 в 23:15
поделиться

От статей Вы связались:

Чтобы быть детерминированным, параметр стиля должен быть константой. Кроме того, разрабатывает меньше чем или равный 100, недетерминированы, за исключением стилей 20 и 21. Стили, больше, чем 100, детерминированы, за исключением стилей 106, 107, 109 и 113.

Необходимо использовать параметр стиля в преобразованиях в дату и время.

Например:

CONVERT(datetime, '2008-01-01', 121)

Кроме не используют 121...

4
ответ дан 6 December 2019 в 23:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: