Работа со строками выполняется для преобразования ее в признанный стандартный формат ISO.Без этого ошибка CAST / CONVERT может быть допущена в замешательстве дней и месяцев, поскольку разные культуры используют разные форматы дат.Например, 12/2/2015 может представлять 2 декабря или 12 февраля.
Предоставленный ответ создает строку в формате ISO «ГГГГ-ММ-ДД ЧЧ: мм: сс».Первая строка после SELECT
извлекает год и добавляет дефис, строка после этого - месяц и дефис и так далее.Я предполагаю, что вы заметили ту часть в этой статье, где ОП указал на ошибку в принятом ответе.
Я предполагаю, что вы знаете, что делает каждая отдельная функция (если вы этого не сделаете, вы можете найтиопределения на MSDN - делайте это сейчас, или то, что следует, не будет иметь смысла).Однако, вероятно, это поможет объяснить некоторые шаблоны, используемые в решении, когда эти функции используются вместе.
CHARINDEX('/',REVERSE(notADateTime))
смотрит на строку задом наперед и находит first /
(и так как строка обратная, это последний /
).Таким образом, при использовании в сочетании с 'RIGHT', RIGHT(notADateTime,CHARINDEX('/',REVERSE(notADateTime))-1)
возвращает правый конец строки после того, как последний /
.
RIGHT('00'+*value*,2)
используется для обеспечения определенных значений (таких как часы, минуты, дни и месяцы) имеют две цифры.2 означает, что им нужны последние два символа (которые будут цифрами, поскольку это число).Обратите внимание, что «00» должно быть только «0», так как любое целое число всегда имеет одну цифру.
Как только это в этом формате, оберните его в CAST в DATETIME2, так что это больше не строка.
Теперь у вас есть понимание, что вы должны иметь возможность решить это самостоятельно.Помните, что решение ожидало секунд, которых нет у ваших строк.Дайте мне знать, если вам нужна дополнительная помощь, добавив комментарий.