查询
从员工表中获取加入年份,加入月份和加入日期
这是我必须执行的查询。为此我写了以下脚本:
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
但是当我将convert(varchar,joining_date,100)
更改为convert(varchar,joining_date,101)
结果如下:http://d.pr/i/G5fZ
任何人都可以解释这个参数的含义吗?
答案 0 :(得分: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
答案 1 :(得分: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 for DATENAME:“返回值取决于使用SET LANGUAGE设置的语言环境”。
关于你的初始问题 - 这些参数基本上是样式,或者我会称之为区域特定代码,如此处所述,你可以只针对数据库运行不同的查询,你会看到返回的字符串 - 你会明白为什么你获得意外的结果。有关更多信息,请参阅MSDN: CAST and CONVERT