用于在数据库中搜索列名的SQL查询

时间:2014-03-20 12:03:20

标签: sql regex database

我需要从特定数据库中获取所有列名?我想知道如何使用正则表达式到达数据库中的特定列。

由于

1 个答案:

答案 0 :(得分:1)

告诉我们您正在使用哪种RDBMS会很有帮助 - 所以我们可以为您提供 更多选项 - 但有一种方法可以做到这一点旨在与任何使用ANSI SQL的RDBMS一起使用:使用information_schema。 (请参阅information_schema上的 this Wikipedia link ,作为ANSI标准。)

要获取所有列,您可以使用:

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS 

要获取特定列的列表,当您知道要查找的列的确切名称时(例如OrderNumber),您可以使用:

SELECT COLUMN_NAME, TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME = 'OrderNumber'

但是,如果您不知道列的确切名称和 确切情况 ,以及数据库(或列)的collation可能区分大小写......然后您可以使用LIKE匹配部分列名称,甚至可以使用UPPERLOWER函数包含所有结果,而不管区分大小写。例如,如果您希望查看可能是订单号的所有列,并且您不确定它是OrderNo还是OrderNumber还是ORDER_ID,则可以使用以下内容:

SELECT DISTINCT COLUMN_NAME, TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE UPPER(COLUMN_NAME) LIKE '%ORDER%'
ORDER BY TABLE_NAME, COLUMN_NAME  --or by column_name, table_name, etc.

另请注意:数据库的整理也可能会影响INFORMATION_SCHEMA是否必须大写...有些可能与information_schema(小写)一起使用,但有些可能不会。

就使用 正则表达式 来说......它又回到了解你的RDBMS,以及你正在开发什么(就像你想要做的那样)在C#中使用RegEx?)。在SQL中,使用LIKE会更容易(并且 more here ,关于LIKE中的通配符,在SQL Server中) ,但是对于记录:(1)T-SQL不支持内置的正则表达式,但this question的答案中列出了一些资源。 (2)作为MySQL的起点,请查看this question的答案,看起来您可以使用<columnName> REGEXP <regExp>,例如WHERE COLUMN_NAME REGEXP "*Order*"。 (3)对于PostGreSQL,请查看this question~*子句中WHERE的{​​{1}}将允许您使用WHERE ("COLUMN_NAME" ~* E'*Order*')行的RegEx。

如果正则表达式如此重要,您愿意创建使用它们的函数,那么(对于SQL Server,无论如何)请查看这些链接 at Code Project < / strong>, at MSDN

希望有帮助...