sql-server - 文字日期时间为 yyyy-mm-dd 引发异常
问题描述
我有一个配置有西班牙语设置的数据库,当我使用文字日期时间作为 yyyy-mm-dd 时,我得到一个 varchar 超出范围转换错误。
select convert(datetime, '2014-11-19')
返回
Msg 242, Level 16, State 3, Line 3 La conversión del tipo de datos varchar en datetime produjo un valor fuera de intervalo。
我必须以西班牙语格式编写这些日期时间。这工作正常:
select convert(datetime, '2014-11-19')
我不应该同时使用西班牙语和 yyyy-mm-dd 格式吗?我不想使用西班牙语格式,因为新客户可以使用具有不同区域设置的相同数据库。
我对日期文字没有任何问题,只有日期时间。这适用于西班牙语和 yyyy-mm-dd 格式。
select convert(date, '2014-11-19'),
convert(date, '19-11-2014')
谢谢你。
解决方案
yyyy-MM-dd
在 SQL Server 中不是明确的。使用yyyyMMdd
或yyyy-MM-ddThh:mm:ss.nnnnnnn
。如果您不是美国 SQL Server(愚蠢地)读取yyyy-MM-dd
旧yyyy-dd-MM
数据日期和时间数据类型。根据您的错误,您不是美国人,因此是错误。
注意:yyyy-MM-dd
对于较新的日期和时间数据类型是明确的。微软修复了该“功能”。
或者,您可以提供样式代码CONVERT
来指定格式。在这种情况下,这将是样式 23:CONVERT(date time,'2014-11-19',23)
推荐阅读
- arrays - React-Native 更新状态数组
- ios - titleForHeaderInSection 的问题
- node.js - Wu-palmer Node.js 的语义相似性
- reactjs - ReactJS 中的 LDAP 协议和连接
- quarkus - Quarkus:原生镜像在 docker 之外使用 Maven 构建和运行测试。但是,将本机映像打包到 docker 映像时会出现错误
- php - 如何在一个字段中获取具有多值的总记录?
- python - 在python中,如何将用户名和密码从变量传递给python中的cx_Oracle.connect
- mysql - SQL:将字符串转换为数组
- sql - 在 oracle 上更改语句失败
- javascript - 如何在不重新加载页面的情况下将值从控制器发送到 ejs:Nodejs