我无法获得意大利语"约会时间。我做错了什么?这是我的代码:
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
"作为日期时间,所以我可以将它传递给具有日期时间变量的过程。
答案 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