我有一个名为FcData的表,数据如下:
Op_Date
2011-02-14 11:53:40.000
2011-02-17 16:02:19.000
2010-02-14 12:53:40.000
2010-02-17 14:02:19.000
我希望mm / yyyy格式样本输出的输出应为:
Op_Date
02/2011
02/2011
02/2010
02/2010
我写的查询如下:
SELECT CONVERT(VARCHAR,DATEPART(mm,Op_Date
)) + '/' + CONVERT(VARCHAR,DATEPART(yyyy,Op_Date))
FROM Fcdata
但我得到的输出为:
Op_Date
2/2011
2/2011
2/2010
2/2010
任何人都可以帮助我吗?
答案 0 :(得分:4)
我认为这是关于您找到的最短代码,只需要一次转换:
SELECT RIGHT(CONVERT(CHAR(10), Op_Date, 103), 7);
将其映射到您的查询:
SELECT Op_Date, RIGHT(CONVERT(CHAR(10), Op_Date, 103), 7)
FROM dbo.Fcdata;
加入将是:
SELECT f.*, o.*
FROM dbo.Fcdata AS f
INNER JOIN dbo.OtherTable AS o
ON RIGHT(CONVERT(CHAR(10), f.Op_Date, 103), 7) = o.column_name;
如果表很大,请不要指望性能会很快,因为转换会强制SQL Server扫描每一行。
另外请不要使用像yyyy和mm这样的速记。你知道y和yyyy有什么不同吗?现在有五种不同的短号以m(m,mi,ms,mm,mcs)开头?拼写出来。如果你的意思是YEAR,那就说YEAR。然后每个人都清楚。
答案 1 :(得分:1)
SELECT
CASE WHEN LEN(CONVERT(VARCHAR,DATEPART(mm,Op_Date)) = 1 THEN
'0' + CONVERT(VARCHAR,DATEPART(mm,Op_Date)) + '/' + CONVERT(VARCHAR,DATEPART(yyyy,Op_Date))
ELSE
CONVERT(VARCHAR,DATEPART(mm,Op_Date)) + '/' + CONVERT(VARCHAR,DATEPART(yyyy,Op_Date))
END
FROM Fcdata
答案 2 :(得分:1)
SELECT RIGHT('0' + CONVERT(VARCHAR(2), DATEPART(MM, Op_Date)), 2) + '/' + CONVERT(VARCHAR,DATEPART(yyyy,Op_Date))