来自没有表

时间:2017-04-28 12:38:13

标签: mysql bash

我有一个小的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?

1 个答案:

答案 0 :(得分:1)

很难相信这会更快。但如果你这样做:

SELECT COUNT(DATE_FORMAT($dd, '%Y%m%d'))

然后当它无效时你会得到0而有效时会得到1。