无法获得"意大利语"约会时间

时间:2014-05-26 08:16:54

标签: sql sql-server datetime

我无法获得意大利语"约会时间。我做错了什么?这是我的代码:

DECLARE @Dat Nvarchar(100) set @Dat = '2014.05.25.;'
Declare @k int, @dat1 datetime, @dat2 datetime
set @k=0
set @k=CHARINDEX(';',@Dat)
set @dat2 = substring(@Dat, 1, @k-2)
set @dat1 = convert(datetime, @dat2, 105)
print @dat1

打印:

  

mai 25 2014 12:00AM

但是,我需要" 25-05-2014"作为日期时间,所以我可以将它传递给具有日期时间变量的过程。

4 个答案:

答案 0 :(得分:1)

如果您只想显示日期,那么您必须尝试这样的事情: -

SELECT CONVERT(VARCHAR, GETDATE(), 105)

输出将是: -

26-05-2014

答案 1 :(得分:0)

如果要在不指定格式的情况下使用显式日期值,请使用ISO格式:yyyyMMdd - >你的例子中有“20140525”。所有其他写作方式都取决于系统区域设置。

如果您的过程是正确创建的,它将具有DATETIME或DATETIME2参数,并且不期望具有特定日期格式的字符串。 使用显式格式将字符串解析为datetime的示例:

DECLARE @DATEVAR DATETIME
SET @DATEVAR = CONVERT(DATETIME, '25-05-2014', 105)

使用ISO格式:

SET @DATEVAR = '20140525'

如果您想将日期变量显示为某种格式的字符串,则需要以相反的方式进行转换:

DECLARE @DATEVAR DATETIME
DECLARE @STRINGVAR VARCHAR(50)
SET @DATEVAR = CONVERT(DATETIME, '25-05-2014', 105)
SET @STRINGVAR = CONVERT(VARCHAR(50), @DATEVAR, 105)
PRINT @STRINGVAR

在你的字符串示例中,像这样解析它,你只需要保留ISO格式。显然,您还可以使用其他日期格式并将其显式化。

SET @DATEVAR = REPLACE(REPLACE('2014.05.25.;', ';', ''), '.', '')

答案 2 :(得分:0)

正如我在那里的一条评论中所说,如果您需要将该变量作为参数,您不应该关心它的格式或显示方式。 日期时间字段始终“保存”为2个整数,一个用于时间,一个用于日期。

使用SQL Server可以计算的最大日期(9999/12/31)我们有:

DateInt  DateBinary
-------------------
2958463  0x002D247F

TimeInt  TimeBinary
-------------------
25919999 0x018B81FF

因此,如果您只需要传递给USP的DATETIME值,请使用您已有的值!没有必要将其转换为字符串,这只是存储在该变量中的值的图形表示。

答案 3 :(得分:0)

另一方面,您可以更改该转换。

并使您的代码看起来像您看到的那样。

来自此:convert(datetime, @dat2, 105)

对此:convert(VARCHAR, @dat2, 5)

这让我可以在Itlian中抽出时间来尝试一下,这对我来说很好。

  

SET LANGUAGE Italian