我是sql的新手,我遇到日期格式问题我知道我可以使用强制转换或转换功能,但我正在寻找dateformat(我们使用格式dd / mm / yy)。我看起来很有趣,很容易但是有一个问题。 如果我运行此数据视图
SELECT hotel, id, codicecliente, prodotto, CAST(REPLACE(numeros, ',', '.') AS decimal(7, 2)) AS numero, CAST(REPLACE(importos, ',', '.') AS decimal(7, 2)) AS importo,
CAST(datas AS datetime) AS data, puntovendita, DATEDIFF(day, '01/01/2000', datas) AS datav, isdate(datas) AS Expr1
FROM dbo.addebititmp
WHERE (isdate(datas) = 1)
它向我显示了大约15.000条记录,它没有显示所有包含12天以上数据的记录,因为系统将前2个识别为月而不是日 如果我添加SET DATEFORMAT dmy 并运行以下
SET DATEFORMAT dmy
SELECT hotel, id, codicecliente, prodotto, CAST(REPLACE(numeros, ',', '.') AS decimal(7, 2)) AS numero, CAST(REPLACE(importos, ',', '.') AS decimal(7, 2)) AS importo,
CAST(datas AS datetime) AS data, puntovendita, DATEDIFF(day, '01/01/2000', datas) AS datav, isdate(datas) AS Expr1
FROM dbo.addebititmp
WHERE (isdate(datas) = 1)
它正确显示所有38.000条记录,但是当我保存视图系统时显示错误:关键字集附近的语法不正确。所以我可以跑,但不能使用它。我也尝试使用transact sql,但如果我使用dateformat创建一个视图,它不会保存dateformat并显示更少的记录。 有什么建议吗?谢谢
答案 0 :(得分:0)
看起来你可能是意大利人?如果是这样,您应该在服务器上将默认语言更改为意大利语。这也将默认更改您的DATEFORMAT以接受欧式日期。我假设您所有的char格式日期将以该格式存储?这将告诉你如何:
How to change default language for SQL Server?
此外,关于在视图中保存dateformat设置,您无法将其保存在视图中,原因与您无法在视图中保存“set nocount on”相同。但是您可以在引用该视图的存储过程中设置dateformat。但我真的认为在你的情况下你应该设置服务器范围的语言,这将解决这个问题。
答案 1 :(得分:0)
凯文,你的解决方案不适合我。 解决了这个问题 创建此功能并按照我的意愿使用 我建议将其保留为nvarchar而不是date来控制视图中的所有数据。
- ============================================= 创造功能fdataitaineng ( - Questa funzione trasforma da formato italiano ad inglese @datas nvarchar(12) ) 返回nvarchar(12) 如 BEGIN
DECLARE @datan as nvarchar(12)
选择@ datan = SUBSTRING(@datas,4,2)+' /' + SUBSTRING(@datas,1,2)+' /' + SUBSTRING(@datas,7,4)
RETURN @datan
END GO
答案 2 :(得分:0)
使用SET DATEFORMAT dmy
创建视图时的错误是由于视图是单个查询的封装,而不是多个命令。如果您需要多个命令,则必须使用多语句表值函数。但是这里没有必要使用TVF。
使用TRY_CONVERT因为它将处理翻译和“ISDATE”行为。它将转换为正确的DATETIME或它将返回NULL。从这个意义上讲,非NULL值等于ISDATE返回1,而NULL值等于ISDATE返回0.因为您的数据格式为DD / MM / YYYY,即“样式”号103(完整列表CAST and CONVERT MSDN页面上的日期和时间样式。
SELECT TRY_CONVERT(DATETIME, tmp.DateDDMMYYYY, 103) AS [ConvertedDate],
tmp.ShouldItWork
FROM (
VALUES('23/05/2014', 'yes'),
('05/23/2014', 'no'),
('0a/4f/2014', 'no')
) tmp(DateDDMMYYYY, ShouldItWork);
结果:
ConvertedDate ShouldItWork
2014-05-23 00:00:00.000 yes
NULL no
NULL no