2017-05-02 84 views
0

我試圖在Netezza數據庫中的某處找到某些信息。我搜查了所有欄目,看看它們是否與我一直在尋找的名稱匹配:在Netezza中查找具有特定格式值的列

SELECT * 
FROM _V_SYS_COLUMNS 
WHERE 
COLUMN_NAME like '%COW%' 
; 

但沒有成功。所以我想檢查數據庫中每列的第一個值,看看它是否是一個長度爲7個字符的字符串。

有什麼想法?我知道這是一個需要一段時間才能運行的龐大查詢。

回答

0

在互聯網的幫助下,我讓這個shell腳本在bash中運行。它會像字符串一樣查找列值。取決於你的SQL風格,你可以說WHERE LEN(column_value) = 7

它肯定需要一段時間才能運行,它實際上在我們的數據庫創建完成之前創建了鎖。

HTH

#!/bin/sh 
# 
# search.sh 

DB=$1 
STRING=$2 

if [ "$DB" == "" -o "$STRING" == "" ] 
then 
    echo "usage:" 
    echo " alltextsearch DB STRING" 
    exit 2 
fi 

sql $DB <<!EOT! | grep \| | grep -v '^|col1' 

DECLARE GLOBAL TEMPORARY TABLE SESSION.gen_sql (
    sql_command varchar(500) 
) 
ON COMMIT PRESERVE ROWS 
WITH NORECOVERY; 
\g 
INSERT INTO SESSION.gen_sql 
SELECT 'SELECT ''OWNER.TABLE.COLUMN'',''VALUE''\g' 
\g 
INSERT INTO SESSION.gen_sql 
SELECT SQUEEZE(
    'SELECT ''' 
     +table_owner+'.'+table_name+'.'+column_name+''',' 
     +column_name 
    +' FROM '+table_owner+'.'+table_name 
    +' WHERE '+column_name+' LIKE ''%$STRING%'' \g') 
    FROM iicolumns 
    WHERE column_datatype IN ('C','CHAR','TEXT','VARCHAR','NCHAR','NVARCHAR') 
\g 

COPY SESSION.gen_sql(sql_command= CHAR(0)nl) 
    INTO 'temp.sql'; 
\g 
\i temp.sql 
!EOT! 
相關問題