我有一个小的bash函数非常好用旨在检查滥用MySQL的日期有效性,因为它比使用GNU日期更快。目的是返回YYYYmmdd格式的验证日期,以用作其他命令的输入。在这里:
function checkdate { for dd in $(seq $1 $2) ; do mysql -BNe "SELECT DATE_FORMAT($dd,'%Y%m%d')" | grep -v NULL ; done ; }
正如我已经评论过它的效果非常好,但我发现用grep -v
过滤掉NULL值有点难看。
正如有人在这里请求MCVE一样,为自己提供极其复杂的输出!
SELECT DATE_FORMAT('20160228','%Y%m%d') ;
20160228
SELECT DATE_FORMAT('20160229','%Y%m%d') ;
NULL
谁会猜到这一点?但等等,还有更多!这个邪恶的grep -v
在那里做什么?我的天啊!我们现在肯定需要一个MCMVE来保护星系免受Sagitarius黑洞的吸收:
echo NULL | grep NULL
NULL
echo NULL | grep -v 'NULL'
:tumbleweed:
请注意在这个奇怪的单词-v
之后艺术性地放置grep
,整洁,是吧?
所以,函数的基本功能是:
checkdate 20160227 20160231
20160227
20160228
20160229
那就是它。它方便地(对我来说)返回格式为YYYYmmdd的有效日期列表,MySQL的日期时间函数非常满意这种格式。
我的问题是:
有没有更优雅的方法在纯SQL中执行此操作而不必重复使用grep -v?
答案 0 :(得分:1)
很难相信这会更快。但如果你这样做:
SELECT COUNT(DATE_FORMAT($dd, '%Y%m%d'))
然后当它无效时你会得到0而有效时会得到1。