mysql - 来自不带表的 SELECT 语句的非 NULL 日期时间值

标签 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,以保护星系不被人马座黑洞吸收:

echo NULL | grep NULL
NULL
echo NULL | grep -v 'NULL'
:tumbleweed: 

请注意这个奇怪的单词grep后面艺术地放置的-v,很整洁,对吧? 所以,基本上该函数的作用是:

checkdate 20160227 20160231
20160227
20160228
20160229

就是这样。它返回一个有效日期列表(对我来说),格式为 YYYYmmdd,MySQL 的日期时间函数非常满意这种格式。

我的问题是:

有没有一种更优雅的方法可以在纯 SQL 中做到这一点,而不必重复使用 grep -v ?

最佳答案

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

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

那么当它无效时你会得到 0,当它有效时你会得到 1。

关于mysql - 来自不带表的 SELECT 语句的非 NULL 日期时间值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43680470/

相关文章:

bash - 你需要在所有 bash 脚本中使用 shebang 吗?

php - 带有 $i 和 $_POST 值的 SQL 循环

mysql - 如何从特定月份的表中查找所有数据

linux - 通过bash查找特定文件的数量

php - 如何从需要 SUDO 的 php 调用 shell 脚本?

arrays - 将行分隔的 grep 结果放入数组

mysql - 如何对 MySQL `ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction` 进行故障排除

php - android如何使用php页面代码连接MySQL数据库?

mysql - 如何检查 MySQL 脚本中前面语句的错误?

bash - Bash 转义字符 "\c"是什么?