我正在将数据仓库从Oracle迁移到SQL Server 2012.
我在Oracle中每天使用一百次的一段代码是使用以下内容更改查询的日期格式:
To_Char(entry_date,'WMMYY') = 30612
上面允许我抓住日期(默认格式= DD-MON-YY
,例如01-JAN-12
),并通过简单列出指定的一周的格式(上例中的六月的第三周)一周。
在我看来,上面的内容非常简单易用。我可以将它更改为我想要的任何格式(MMYY,MMYYYY)等,没有任何问题。到目前为止,我无法弄清楚在SQL Server 2012中执行此操作的简单方法,它真的开始困扰我。它是SQL Server中的datetime2
。
我正在寻找CAST(), CONVERT(), DATEPART()
的东西但是从我所看到的那里有各种古怪的编码和数字代码(如101,102,我不明白为什么会这样),这似乎是必要的对我来说无关紧要而且过于复杂。
我是否刚刚找不到我正在寻找的内容,或者这只是它与SQL Server的关系?我只想做一些简单的事情,比如抓住6月份或10月第二周输入的所有数据,而不必添加200个额外的代码字符。
答案 0 :(得分:0)
这是一个开关。您正在使用SQL Server 2012,因此请查看FORMAT()
函数。 http://technet.microsoft.com/en-us/library/hh213505%28SQL.110%29.aspx我不是,所以不幸的是我无法为你测试任何东西 - 但是有一些日期格式的改进。
对于我们这些没有 - 的人来说,有些事情你可以做得很棒 - 一旦你习惯了。这不是特定于SQL Server的 - 但是每个月的周数因组织而异 - 所以你必须定义它以获得一个月的第3周的好例子等。此外,当使用DATEPART
时周或日参数,返回的内容取决于一周中第一天的设置(1-7 - @@DATEFIRST
)。 CONVERT
的数字样式(如果您在2012年再次查看FORMAT()
)绝对不是那么直观 - 但您可能会一遍又一遍地使用相同的样式,并且您将拥有他们很快就记住了。如果您设置为'WMMYY'或只是使用一遍又一遍没有令人满意的内置解决方案 - 请创建一个UDF
。
在6月份输入的数据
DATEPART(mm,@date) = 6
当月
month(getDate())
或本周
DATEPART(ww,GetDate())