我正在从日期以“DDMMYYYY”格式表示的文件开发ETL,例如“31012016”。
我想获取这个字符串并将其直接传递给将插入数据的 SQL 文本。我不想将其解析为 C# DateTime 然后将其格式化为“YYYY-MM-DD”,以便 SQL Server 再次解析它。
正如我目前所做的那样,日期字符串由 .Net 解析一次,然后由 .Net 格式化并打印在 SQL 代码中,然后由 SQL Server 再次解析。我想从平面文件中获取字符串并将其直接放入 SQL 代码中,无需任何转换。
SQL Server 识别“YYYYMMDD”,但“DDMMYYYY”失败并显示以下消息:
从字符串转换日期和/或时间时转换失败。
例子:
DECLARE @datevar date = PARSE('31012016' as date using 'pt-BR');
SELECT @datevar;
有什么办法让它工作吗?
我试过PARSE('31012016' as date using 'pt-BR')
但引发了异常。TRY_PARSE
返回空值。还尝试了 CAST 和 CONVERT (Transact-SQL),但似乎不存在这种风格。
当日期表示为 8 个数字而没有任何分隔符时,SQL Server 将始终尝试将其解释为
YYYYMMDD
. 该格式已被故意选择为与区域设置或文化无关(事实上也是ISO 8601DDMMYYYY
标准日期格式之一),并且无法让服务器将其解释为或以任何其他方式。因此,要么重新排列字符串的日期部分
DDMMYYYY
以使其YYYYMMDD
:或插入分隔符以使其匹配已知的分隔 DMY 格式之一,例如
DD/MM/YYYY
:我同意没有直接转换,但这很简单,但是性能会很差,所以坚持一点字符串操作!
不,我找不到任何方法让它隐式转换。这是我能想到的最简单的。