Избегайте пользователей с неверным форматом времени SQL - PullRequest
0 голосов
/ 18 апреля 2019

Вот мой простой запрос

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"

Интересно, как избежать этого сообщения?

1 Ответ

0 голосов
/ 18 апреля 2019

Это для 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)
...