2013-05-10 2 views
-1

ЗапросЧто делает третий параметр в CONVERT()?

Получить Вступление года Вступление Месяца и присоединение Даты из таблицы

служащего Это мой запрос, который я должен выполнить. Для этого я пишу следующий сценарий:

select 
    SUBSTRING (convert(varchar,joining_date,103),7,4) , 
    SUBSTRING (convert(varchar,joining_date,100),1,3) , 
    SUBSTRING (convert(varchar,joining_date,100),5,2) 
from 
    EMPLOYEE 

Результат является: http://d.pr/i/vObI

Но когда я изменил convert(varchar,joining_date,100) к convert(varchar,joining_date,101)

Результат выглядит так: http://d.pr/i/G5fZ

Может кто-нибудь, пожалуйста, объясните, что этот параметр означает?

+1

Если вы переводите «sql server» * Google, то первые три записи объясняют это подробно. – RBarryYoung

+0

Microsoft задумчиво предоставила [документацию] (http://msdn.microsoft.com/en-us/library/ms187928 (v = sql.105) .aspx), чтобы точно объяснить, что «CONVERT» - и все остальные [ in function] (http://msdn.microsoft.com/en-us/library/ms174318 (v = sql.105) .aspx) - делает, в том числе и каждый параметр. – Pondlife

ответ

0

Существует несколько способов, которыми можно форматировать дату, используя convert(varchar.... Они хорошо документированы на MSDN site или different sites online.

Использование convert(varchar..., date, 100) помещает дату в формате:

mon dd yyyy hh:mmAM (or PM) 
May 10 2013 12:55PM 

Использование convert(varchar...date, 101) ставит дату в формате:

mm/dd/yyyy 
05/10/2013 

См Demo

Мое предложение было бы каждый раз, когда вы реализуете эти конверсии, обязательно укажите длину на varchar(10) и т. д.

Основываясь на том, что она выглядит, как вы возвращаетесь, вы можете устранить некоторые из утверждений convert/substring, которые вы используете и реализовать некоторые другие функции, чтобы получить тот же результат:

select year(joining_date) as [year] , 
    convert(varchar(3),joining_date,100) as [month] , 
    day(joining_date) as [day] 
from EMPLOYEE 
0

Я думаю, что есть лучший подход, чтобы разделить и получить части даты-времени с помощью DATEPART:

select DATEPART(YEAR, [joining_date]), 
    DATEPART(MONTH, [joining_date]), 
    DATEPART(DAY, [joining_date]) from EMPLOYEE 

или, если вы заинтересованы, например, в именах использовать DATENAME:

select DATEPART(YEAR, [joining_date]), 
DATENAME(MONTH, [joining_date]), 
DATEPART(DAY, [joining_date]) from EMPLOYEE 

Однако, согласно MSDN для DATENAME: «Возвращаемое значение зависит от языковой среды, установленной с помощью SET LANGUAGE».

Что касается вашего первоначального вопроса - эти параметры являются в основном стилями, или я бы назвал их региональными конкретными кодами, как описано здесь, и вы можете просто запускать разные запросы к БД, и вы увидите возвращаемые строки - и вы увидите, почему вы получаете неожиданные результаты. Для получения дополнительной информации см. MSDN: CAST and CONVERT

Смежные вопросы