sql - 避免使用无效格式化时间 SQL 的用户
问题描述
这是我的简单查询
SELECT
playerId,
max(accountlevel) as level,
max(appActiveTime) as overall_time,
max(matchcount) as matchcount
FROM client
WHERE partition_0 = '2019'
AND partition_1 = '03'
AND install_date BETWEEN date('2019-03-01') AND date('2019-03-20')
AND date BETWEEN date('2019-03-01') AND date('2019-03-31')
AND accountagedays = 0
GROUP BY playerId
雅典娜归还我
INVALID_FUNCTION_ARGUMENT: Invalid format: "2019-0+-28T23:43:57.4142360Z" is malformed at "+-28T23:43:57.4142360Z"
我想知道如何避免这个消息?
解决方案
它适用于 SQL Server:我建议使用 ISDATE 函数来验证输入然后转换它,如果它是正确的日期格式,那么它应该转换并检查给定日期之间的时间。您可以使用字符串来验证日期。下面的代码只是为了让您了解如何进行相应的检查和转换。如果您提供带有数据和列类型的临时表,则可以获得实际结果。
declare @install_date datetime= '2019-03-01'
select CAST(IIF(ISDATE(@install_date) = 1,@install_date,'1900-01-01') as Date)
go
declare @install_date varchar(10)= '2019-23-01'
select CAST(IIF(ISDATE(@install_date) = 1,@install_date,'19000101') as Date)
go
declare @install_date varchar(100)= 'string not a date'
select CAST(IIF(ISDATE(@install_date) = 1,@install_date,'19000101') as Date)
推荐阅读
- file-upload - 如何开玩笑地模拟文件上传或文件对象?
- collections - 如何在具有相同键的哈希图中添加值以及何时将值存储为另一个哈希图
- java - 如何将txt文件放到第二个txt文件的特定行
- mysql - MYSQL 案例何时
- python-3.x - 如何在真正的智能手机上运行自动化测试?
- sql - SQL连接查询效率
- python - 正则表达式从字符串中提取特定文本
- dbus - 如何在 dbus 信号中将结构作为参数传递?
- typescript - 如何使用 ts.data.json 解码嵌套对象
- javascript - 如何设置 Winston 日期格式字符串以获得微秒分辨率?