如何转换3种日期?

时间:2012-01-25 14:32:51

标签: sql sql-server tsql

我想创建一个函数,它有一个参数(一个包含日期的字符串)然后该函数转换它并返回它。在我们公司,我们有三种不同语言的工作站。我们也有匈牙利语,英语和德语工作站。我想从注册表中读取日期,但是这个日期将根据当前的区域设置写入注册表。

因此,如果区域设置是匈牙利语,则日期写入日期注册表是2012.01.25(YYY.MM.DD),但如果我将区域设置更改为德语,则写入注册表的值将为25/01 / 2012(MM.DD.YYYY)。如果我将区域设置更改为英语,则该值将为01/25/2012(DD.MM.YYYY)。

不幸的是,我不知道在将日期写入注册表时使用了哪个区域设置,因为它可以在将值写入注册表后进行更改。

这就是为什么我想创建一个获取日期的函数,然后将其转换为这种格式:YYYY.MM.DD。但我不知道该怎么做。

有人可以帮我怎么做吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

您是直接管理此注册表值还是属于另一个软件而只是尝试过它?

如果是你的,那么

一个。如果它是一个字符串值,那么只需在存储之前格式化它,以ISO格式(yyyy-MM-dd),格式或formatdate函数就可以了。

B中。如果它是二进制值,则使用cdbl将datetime值转换为double并存储

好吧,如果它不是你的,那么这不是你的幸运日。几年前我已经完成了这个,并且我使用了日期周围的文字来对格式做出假设......

答案 1 :(得分:0)

如果您将这些日期保存在日期类型的列(DATETIME, DATE, SMALLDATETIME等)上,那么它的显示方式或保存的语言无关紧要。如果您想将格式为YYYY.MM.DD的DATE转换为VARCHAR,则可以使用:CONVERT(VARCHAR(10),YourDate,102)

答案 2 :(得分:0)

您可以使用此表达式将字符串转换为SQL类型date。该表达式仅在DD/MM/YYYY格式无法使用其默认MM/DD/YYYY格式时才使用CASE WHEN CHARINDEX('/', val)=5 THEN CONVERT(date,val,111) ELSE CONVERT(date, val, CASE WHEN LEFT(val,2) <= '12' THEN 101 ELSE 103 END) END 格式

select

此表达式应在varchar语句中使用。我假设您的val列的名称包含日期字符串{{1}}。