SQL Динамический DatePart при использовании DateDiff

Поскольку вы используете AndroidX, ваш XML ссылается на неправильную версию SwipeRefreshLayout

. Изменения в вашем XML с android.support.v4.widget.SwipeRefreshLayout на androidx.swiperefreshlayout.widget.SwipeRefreshLayout

.
21
задан dance2die 7 May 2009 в 17:45
поделиться

3 ответа

Согласно записи BOL в DATEDIFF (раздел arguments ) для SQL Server 2005,

Эти даты и сокращения не могут быть предоставлены как пользователь -declared переменная.

Так что вы, вероятно, застряли с Dynamic SQL или с помощью оператора CASE. Но я бы выбрал версию CASE вместо динамического SQL.

19
ответ дан 29 November 2019 в 20:43
поделиться

Единственное, что вы действительно можете сделать, кроме предложенного динамического оператора sql или case, - это всегда делать датировку в гранулированном DatePart и затем преобразовывать с повышением. Это не является надежной проверкой, однако, вы получите переполнение в функции, если попытаетесь использовать datediff для детализации детали на слишком большом промежутке, например, datediff (second, 0, getdate ()). Но если вам просто нужно что-то вроде мелких частей, у вас все будет в порядке (перепроверьте с максимальными значениями даты, которые вас интересуют).

Так, например,

select datediff(minute, 0, getdate())

Если я хочу преобразовать это в часы, дни и т. Д., Я могу просто разделите результат на соответствующую сумму. Это не будет учитывать високосные годы и т. Д.

2
ответ дан 29 November 2019 в 20:43
поделиться

Я не думаю, что есть лучшие способы, чем вы описываете. Sql Server, вероятно, компилирует запрос DATEDIFF в набор операций, которые зависят от параметра datepart. Поэтому вам нужен CASE или динамические запросы.

0
ответ дан 29 November 2019 в 20:43
поделиться
Другие вопросы по тегам:

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