【发布时间】:2011-12-08 01:07:15
【问题描述】:
我已经有一段时间没有发表“将 MySQL 转换为 PostgreSQL”的帖子了。
那么,今天的问题如下:
最初的 MySQL 查询涉及 where 子句,看起来有点像以下:
WHERE id LIKE '%6%'
OR createdtime LIKE '%6%'
OR modifiedtime LIKE '%6%'
OR start_date LIKE '%6%'
OR end_date LIKE '%6%'
OR sc_related_to LIKE '%6%'
OR tracking_unit LIKE '%6%'
OR message LIKE '%6%'
此查询是系统范围搜索的一部分。在这种情况下,系统正在搜索6,如果我要求它搜索其他内容,例如说单词user,而不是%6%,我们就会有%user%。
现在,问题在于,上述数据类型并不总是字符串。像id 这样的整数字段和像createdtime 这样的日期/时间字段正在与字符串进行比较。在 MySQL 中,这似乎没问题,但是脾气暴躁的 PostgreSQL 看到这个查询就会变得脾气暴躁。
我知道对于某些字段,我可以使用to_char 函数,因此,例如,PostgreSQL 中的部分子句可能如下所示:
to_char(id, '999') LIKE '%6%'
不幸的是,由于 PHP 后端,我不能只完成查询并将 to_char 添加到每个适用字段。这是生成 WHERE 子句的 PHP 代码的样子:
$where .= $tablename.".".$columnname." LIKE '". formatForSqlLike($search_val) ."'";
注意:它是循环的一部分,因此上面的行会生成所有单独的比较。
所以,即使我可以绕过与to_char 的类型比较,我也无法实现它,因为to_char 可能需要针对不同数据类型的特定第二个参数,即使我可以使用相同的参数对于所有数据类型,一些数据类型将是字符串,将字符串传递给to_char 会引发错误。
所以,我需要一种方法让 PHP 确定列类型并相应地使用正确的to_char(或根本不使用它),或者我需要让 PostgreSQL 来比较不同的数据类型。
感谢您的帮助,祝您有美好的一天!
【问题讨论】:
-
对
date列使用 LIKE 有什么意义? -
我不知道...我没有编写代码。 :( 我想,它的存在是为了如果用户搜索一个日期,它可以得到一些结果,但我不知道
LIKE与dates的工作情况如何。 -
PostgreSQL gets grumpy when it sees this query... 很适合 PosgresSQL。 -
哦,Postgres 很好,只是它不像 mySQL 那样愚蠢。
标签: php mysql postgresql