В зоопарке есть недокументированное и не экспортированное .fill_short_gaps
, которое используется так:
zoo:::.fill_short_gaps(x, fill = numeric(length(x)), maxgap = 3)
, дающее:
2019-01-17 2019-01-18 2019-01-19 2019-01-20 2019-01-21 2019-01-22 2019-01-23
1 0 0 0 5 6 7
2019-01-24 2019-01-25 2019-01-26 2019-01-27 2019-01-28 2019-01-29 2019-01-30
8 9 NA NA NA NA NA
2019-01-31 2019-02-01 2019-02-02 2019-02-03 2019-02-04 2019-02-05
NA NA 17 18 19 20
Я протестировал следующий запрос со многими различными неверными адресами электронной почты и действующими электронными адресами. Это должно сделать задание.
IF (
CHARINDEX(' ',LTRIM(RTRIM(@email_address))) = 0
AND LEFT(LTRIM(@email_address),1) <> '@'
AND RIGHT(RTRIM(@email_address),1) <> '.'
AND CHARINDEX('.',@email_address ,CHARINDEX('@',@email_address)) - CHARINDEX('@',@email_address ) > 1
AND LEN(LTRIM(RTRIM(@email_address ))) - LEN(REPLACE(LTRIM(RTRIM(@email_address)),'@','')) = 1
AND CHARINDEX('.',REVERSE(LTRIM(RTRIM(@email_address)))) >= 3
AND (CHARINDEX('.@',@email_address ) = 0 AND CHARINDEX('..',@email_address ) = 0)
)
print 'valid email address'
ELSE
print 'not valid'
Это проверяет эти условия:
AFAIK там не является никаким хорошим способом сделать это.
Почтовый стандарт формата является настолько сложными синтаксическими анализаторами, как, было известно, работали к тысячам строк кода, но даже если бы необходимо было использовать более простую форму, которая привела бы некоторые неясные, но допустимые адреса к сбою, необходимо будет сделать это без регулярных выражений, которые исходно не поддерживаются T-SQL (снова, я не 100% на том), оставляя Вас с простой нейтрализацией чего-то как:
LIKE '%_@_%_.__%'
.. или подобный.
Мое чувство обычно в том состоит, что Вы shouln't сделать это в прошлый момент, хотя (поскольку Вы вставляете в DB) необходимо делать его при первой возможности и/или общий шлюз (контроллер, который на самом деле заставляет SQL вставить запрос), где случайно Вы имели бы преимущество regex и возможно даже библиотеки, которая делает "реальную" проверку для Вас.
При использовании SQL 2005 или 2008, Вы могли бы хотеть посмотреть на запись, что CLR сохранил proceudues, и используйте.NET regex механизм как это. Если Вы используете SQL 2000, или ранее можно использовать регулярное выражение механизма выполнения сценариев VBScript как тыс. Вы могли также использовать расширенную хранимую процедуру как это
Нет никакого простого способа сделать это в T-SQL, я боюсь. Для проверки всех вариантов адреса электронной почты, позволенного byRFC 2822, необходимо будет использовать регулярное выражение.
Необходимо будет определить объем, если Вы захотите упростить его.