mysql postgresql 查询不指定表名和公用文件夹

Posted

技术标签:

【中文标题】mysql postgresql 查询不指定表名和公用文件夹【英文标题】:mysql postgresql query without specifying table name and public folder 【发布时间】:2015-01-20 10:51:24 【问题描述】:

我的客户请求从使用 mysql 更改为 PostgreSQL。数据库迁移运行良好,我的代码使用 DevArt dotConnect Universal。除了实际的 SQL 语句之外,一切看起来都不错。

在我使用的 C# 代码中,

"SELECT * FROM users WHERE user_name LIKE '%abc%';"

它可以与 MySQL 一起使用,但是当它连接到 PostgreSQL 时,我必须更改要使用的 SQL 语句,

"SELECT * FROM public.\"users\" WHERE user_name LIKE '%abc%';"

而且搜索到的文字是区分大小写的!

我该怎么做, (a) 使搜索的文本不区分大小写? (b) 避免需要在表名前添加 [public.] 并用双引号括起表名?

我看到有人在这里发布了一些东西,Accessing a table without specifying the schema name 但我有 120 张桌子,这会很耗时。有没有更快的方法来解决我上面描述的 2 个问题?

编辑: 哦,我意识到这两个语句产生了相同的结果。

SELECT * FROM Public.user;

SELECT * FROM \"user\";

【问题讨论】:

AFAIK 您不需要指定公共架构。如果表名不是全部小写并且没有空格或其他“有趣”字符,则只需双引号 - 尽管我不知道 dotConnect 是否如此......不区分大小写很容易 - 使用喜欢。 没有必要用public 模式来限定表名(除非你弄乱了默认搜索路径)。如果您创建的表没有引用,您也不需要引用表名。是的,字符比较 is 在 Postgres 中区分大小写 谢谢你们俩。我注意到数据库中有一些东西是由他们以前的程序员完成的。顺便说一句,她使用关键字作为列名,例如“类型”。当然,我可以将其更改为“fruit_type”,但不仅要更改所有 120 个表,还必须更改代码和 Crystal Report。有更快的方法吗? 如果SELECT * FROM Public.user; 有效,那么select * from users(不带任何引号)也同样有效。您可以使用type 作为表名,而无需在 Postgres 中引用它:sqlfiddle.com/#!15/740cb/1 谢谢你们,我会调查的。希望我能在星期五之前得到一些东西。 【参考方案1】:

(a) 使搜索到的文本不区分大小写?

PostgreSQL 中的 ILIKE 关键字提供不区分大小写的搜索

SELECT * FROM users WHERE user_name <b>ILIKE</b> '%abc%';

select * from words where <b>LOWER</b>(word) <b>LIKE</b> '%aba%'

注意:如果您的表名是Users,则使用SELECT * FROM "Users"

> SQLFIDDLE DEMO

【讨论】:

感谢@WingedPanther 的快速回复。 SQLFiddle Demo 不错,我会用。我还列出了另一个问题,即如何在不使用 Public 关键字的情况下进行选择,以及如何不对表名进行双引号?另外,您是否知道在哪里可以找到 PostreSQL 9.4 和 MySQL 5.6 之间的 SQL 差异列表? 我在 VB.NET 中使用 PostgreSQL 从未使用过 Public 关键字我认为你不需要使用它??没有它试过吗?? 你是对的。现在它对我有用。反正有一个通用查询语句可以与 postgreSQL、MySQL、MSSQL 一起使用吗? MySQL 使用 ``,postgreSQL 使用 "",MSSQL 没有也可以。 @furor:SQL 标准要求引用标识符的"。 SQL Server 和 MySQL 都可以配置为符合有关引用标识符的标准。 谢谢你们,我会调查的。希望我能在星期五之前得到一些东西。

以上是关于mysql postgresql 查询不指定表名和公用文件夹的主要内容,如果未能解决你的问题,请参考以下文章

mysql存储过程,查询指定数据库具体编码类型含有某字符串的所有表名和列名

使用SQL Server和Mysql查询所有数据库名表名和字段名

MySQL数据库名和表名无法大写的问题

MySQL查询数据库里面所有的表名和表注释 - tables with comment

MySQL查询数据库里面所有的表名和表注释 - tables with comment

查询数据库里所有表名和字段名的语句