如何检查 Teradata 中的列是 CASESPECIFIC 还是 NOT CASESPECIFIC
How to check if column in Teradata is CASESPECIFIC or NOT CASESPECIFIC
假设我有一个 Teradata table,例如:
CREATE TABLE x (
id int,
nc CHAR(20) NOT CASESPECIFIC,
nv VARCHAR(20) NOT CASESPECIFIC,
c CHAR(20) CASESPECIFIC)
如何使用 JDBC
或对 Teradata 的常规 SQL 查询来检查哪一列是 CASESPECIFIC
哪一列是 NOT CASESPECIFIC
?
到目前为止,我测试了以下内容,它们似乎没有提供此类信息:
- DatabaseMetaData#getColumns
help column c from test.x
是否有任何选项可以检查?
编辑
正如@Fred 提到的:
HELP COLUMN returns the same "Uppercase" flag values as dbc.ColumnsV.
And for Teradata JDBC, the ResultSetMetadata interface
(resultset.getMetaData) has the method isCaseSensitive(columnPosition)
我以前没用过,但是看看dbc.columns
中的UpperCaseFlag
字段。来自 Teradata(数据字典)手册:
Possible Values for UpperCaseFlag
U - Uppercase, not specific
C - Not uppercase, specific
N - Not uppercase, not specific
B - Both
Note: Case flags U, C, and B are valid only for CHAR, VARCHAR, and LONG VARCHAR columns.
您可以使用此查询进行测试:
SELECT
col.*,
CASE WHEN col.UpperCaseFlag = 'C' THEN 'Y' ELSE 'N' END AS CaseSpecificFlag
FROM dbc.columnsV col
INNER JOIN dbc.tablesV t ON col.DatabaseName = t.DatabaseName
AND col.TableName = t.TableName AND t.tableKind = 'T' -- Only get tables
WHERE col.TableName = 'x'
AND col.DatabaseName = <database_name> -- Specify database name (if needed)
;
我不是 100% 确定 'B' 选项。测试一下,看看它是如何工作的。
假设我有一个 Teradata table,例如:
CREATE TABLE x (
id int,
nc CHAR(20) NOT CASESPECIFIC,
nv VARCHAR(20) NOT CASESPECIFIC,
c CHAR(20) CASESPECIFIC)
如何使用 JDBC
或对 Teradata 的常规 SQL 查询来检查哪一列是 CASESPECIFIC
哪一列是 NOT CASESPECIFIC
?
到目前为止,我测试了以下内容,它们似乎没有提供此类信息:
- DatabaseMetaData#getColumns
help column c from test.x
是否有任何选项可以检查?
编辑
正如@Fred 提到的:
HELP COLUMN returns the same "Uppercase" flag values as dbc.ColumnsV. And for Teradata JDBC, the ResultSetMetadata interface (resultset.getMetaData) has the method isCaseSensitive(columnPosition)
我以前没用过,但是看看dbc.columns
中的UpperCaseFlag
字段。来自 Teradata(数据字典)手册:
Possible Values for UpperCaseFlag
U - Uppercase, not specific
C - Not uppercase, specific
N - Not uppercase, not specific
B - BothNote: Case flags U, C, and B are valid only for CHAR, VARCHAR, and LONG VARCHAR columns.
您可以使用此查询进行测试:
SELECT
col.*,
CASE WHEN col.UpperCaseFlag = 'C' THEN 'Y' ELSE 'N' END AS CaseSpecificFlag
FROM dbc.columnsV col
INNER JOIN dbc.tablesV t ON col.DatabaseName = t.DatabaseName
AND col.TableName = t.TableName AND t.tableKind = 'T' -- Only get tables
WHERE col.TableName = 'x'
AND col.DatabaseName = <database_name> -- Specify database name (if needed)
;
我不是 100% 确定 'B' 选项。测试一下,看看它是如何工作的。