我需要从特定数据库中获取所有列名?我想知道如何使用正则表达式到达数据库中的特定列。
由于
答案 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
匹配部分列名称,甚至可以使用UPPER
或LOWER
函数包含所有结果,而不管区分大小写。例如,如果您希望查看可能是订单号的所有列,并且您不确定它是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 。
希望有帮助...