我需要查询数据库以获取列名,不要与表中的数据混淆。举例来说,如果我有一个名为表中EVENT_LOG
包含eventID
,eventType
,eventDesc
,和eventTime
,然后我会想检索查询,并没有其他的字段名。
我在以下位置找到了如何执行此操作:
但是我需要知道:如何在Oracle中完成此操作?
我需要查询数据库以获取列名,不要与表中的数据混淆。举例来说,如果我有一个名为表中EVENT_LOG
包含eventID
,eventType
,eventDesc
,和eventTime
,然后我会想检索查询,并没有其他的字段名。
我在以下位置找到了如何执行此操作:
但是我需要知道:如何在Oracle中完成此操作?
Answers:
您可以查询USER_TAB_COLUMNS表以获取表列元数据。
SELECT table_name, column_name, data_type, data_length
FROM USER_TAB_COLUMNS
WHERE table_name = 'MYTABLE'
USER_TAB_COLUMNS
为all_tab_columns
。要对结果100%确定,您可以指定所有者。
你可以这样做:
describe EVENT_LOG
要么
desc EVENT_LOG
注意:仅当您知道表名时才适用,并且特别适用于Oracle。
对于SQLite,我相信您可以使用如下所示的内容:
PRAGMA table_info(table-name);
来自sqlite.org的解释:
该编译指示为命名表中的每一列返回一行。结果集中的列包括列名称,数据类型,该列是否可以为NULL以及该列的默认值。对于不属于主键的列,结果集中的“ pk”列为零,对于属于主键的列,其为主键中列的索引。
另请参见:Sqlite.org语法表信息
该信息存储在ALL_TAB_COLUMNS
系统表中:
SQL> select column_name from all_tab_columns where table_name = 'DUAL';
DUMMY
或者DESCRIBE
,如果您使用的是SQL * PLUS,则可以使用该表:
SQL> desc dual
Name Null? Type
----------------------------------------------------- -------- ---------------------- -------------
DUMMY VARCHAR2(1)
ALL_TAB_COLUMNS
通过官方的Oracle Database Reference获得官方文档。该视图描述了当前用户可访问的表,视图和集群的列。
select column_name from all_tab_columns where table_name = 'dbo.usertbl';
其他答案足以回答问题,但我想我会分享一些其他信息。其他人描述“ DESCRIBE table”语法以获取表信息。如果要以相同的格式获取信息,但不使用DESCRIBE,则可以执行以下操作:
SELECT column_name as COLUMN_NAME, nullable || ' ' as BE_NULL,
SUBSTR(data_type || '(' || data_length || ')', 0, 10) as TYPE
FROM all_tab_columns WHERE table_name = 'TABLENAME';
可能没什么大不了的,但是我之前写了它,看起来很合适。
Incorrect Syntax near '|'
错误
select column_name,* from information_schema.columns
where table_name = 'YourTableName'
order by ordinal_position
MySQL的
SHOW COLUMNS FROM a_table_named_users WHERE Field REGEXP 'user_id|user_name|user_pass'
这将返回如下结果:
Field | Type | Null | Key | Default | Extra
user_id int(8) NO PRI NULL auto_increment
user_name varchar(64) NO MUL NULL
user_pass varchar(64) NO NULL
然后取出值,您可以简单地
fetch row[0]
这对于动态传递输入也非常有用,因为REGEXP需要'|'。用于多个输入,但也是一种使数据分离并易于存储/传递给类/函数的方法。
为了安全起见,请尝试抛出伪数据,并比较收到任何错误后返回的内容。
答案在这里:http : //php.net/manual/en/function.mysql-list-fields.php 在您的情况下,我将使用以下代码:
$result = mysql_query("SHOW COLUMNS FROM sometable");
if (!$result) {
echo 'Could not run query: ' . mysql_error();
exit;
}
$fields = array();
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_assoc($result)) {
$fields[] = $row['Field'];
}
}
您可以运行此查询
SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%%' --if you want to find specific column write here
ORDER BY schema_name, table_name;
只需从表中选择第一行,对于oracle: select * from <table name> where rownum = 1;
遇到了这个问题,试图访问Teradata上的列名,因此我将为其SQL的“风味”添加答案:
SELECT ColumnName
FROM DBC.Columns
WHERE DatabaseName='DBASE_NAME'
AND TableName='TABLE_NAME';
该信息存储在DBC数据库中。
获取数据类型要花点时间: 使用Teradata系统表获取列类型