-1

询问

从员工表中获取入职年份、入职月份和入职日期

这是我必须执行的查询。为此,我编写了以下脚本:

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

谁能解释一下这个参数是什么意思?

4

2 回答 2

0

有几种不同的方法可以使用convert(varchar.... 这些在MSDN 站点不同的在线站点上都有很好的记录。

使用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

演示

我的建议是每当你实现这些转换时,一定要在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
于 2013-05-10T12:56:46.553 回答
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

但是根据 DATENAME 的 MSDN:“返回值取决于使用 SET LANGUAGE 设置的语言环境”。

关于您最初的问题-这些参数基本上是样式,或者我将它们称为此处描述的区域特定代码,您可以对数据库运行不同的查询,您将看到返回的字符串-您将弄清楚为什么会得到意外结果. 有关更多信息,请参阅MSDN:CAST 和 CONVERT

于 2013-05-10T13:02:46.793 回答