[SQL] 어떻게 테이블의 모든 열을 검색 할 수 있습니다?
SQL어떻게 테이블의 모든 열을 검색 할 수 있습니다?
어떻게 SQL Server에서 테이블의 모든 열을 검색 할 수 있습니다?
해결법
-
==============================
1.
SELECT ... FROM yourtable WHERE 'val' IN (field1, field2, field3, field4, ...)
경우 정확한 전체 필드 일치를 찾고 있습니다. 당신이 일치하는 하위 문자열을 찾고 있다면, 당신은 먼 길 가야 할 것이다 :
WHERE field1 LIKE '%val%' or field2 LIKE '%val%' etc....
-
==============================
2.당신은 동적 쿼리를 만드는 .. 이런 식으로 할 수 있습니다 ..
당신은 동적 쿼리를 만드는 .. 이런 식으로 할 수 있습니다 ..
SET NOCOUNT ON; DECLARE @searchText NVARCHAR(100) = 'Test' DECLARE @columnName NVARCHAR(100) DECLARE @tableName NVARCHAR(100) = 'Accounts' DECLARE @sql NVARCHAR(1000) = 'SELECT * FROM ' + @tableName +' WHERE ' DECLARE columns CURSOR FOR SELECT sys.columns.name FROM sys.tables INNER JOIN sys.columns ON sys.columns.object_id = sys.tables.object_id WHERE sys.tables.name = @tableName OPEN columns FETCH NEXT FROM columns INTO @columnName WHILE @@FETCH_STATUS = 0 BEGIN SET @sql = @sql + @columnName + ' LIKE ''%' + @searchText + '%'' OR ' FETCH NEXT FROM columns INTO @columnName END CLOSE columns; DEALLOCATE columns; SET @sql = LEFT(RTRIM(@sql), LEN(@sql) - 2) EXEC(@sql)
-
==============================
3.나는 이것을 위해, 당신은 당신이 검색하고자하는 컬럼의 목록을 지정해야합니다 모든 바로 가기가 생각하지 않습니다. 난 당신이 자신이 많이 일을하려고 발견하면, 당신은 아마도 DB 설계를 개선 할 수 있다고 주장한다.
나는 이것을 위해, 당신은 당신이 검색하고자하는 컬럼의 목록을 지정해야합니다 모든 바로 가기가 생각하지 않습니다. 난 당신이 자신이 많이 일을하려고 발견하면, 당신은 아마도 DB 설계를 개선 할 수 있다고 주장한다.
SELECT * FROM MyTable WHERE Col1 LIKE '%foo%' OR Col2 LIKE '%foo%' OR Col3 LIKE '%foo%' OR Col4 LIKE '%foo%' OR Col5 LIKE '%foo%' OR Col6 LIKE '%foo%'
-
==============================
4.나는 신용을 수는 없지만, 나는이를 발견하고 완벽하게 작동합니다. 당신은에 스키마 이름을 추가뿐만 아니라, 다른 유형을 포함하는 WHERE 절에 추가 데이터 유형을 추가 할 수 있습니다 가입 (아래 주석) 필요한 경우, 검색을 제한합니다.
나는 신용을 수는 없지만, 나는이를 발견하고 완벽하게 작동합니다. 당신은에 스키마 이름을 추가뿐만 아니라, 다른 유형을 포함하는 WHERE 절에 추가 데이터 유형을 추가 할 수 있습니다 가입 (아래 주석) 필요한 경우, 검색을 제한합니다.
DECLARE @SQL VARCHAR(MAX) DECLARE @SearchString VARCHAR(100) SET @SQL='' -- ------------------------------------------ -- Enter the string to be searched for here : SET @SearchString='' -- ------------------------------------------ SELECT @SQL = @SQL + 'SELECT CONVERT(VARCHAR(MAX),COUNT(*)) + '' matches in column ''+''' + C.name + '''+'' on table '' + ''' + SC.name + '.' + T.name + ''' [Matches for '''+@SearchString+''':] FROM ' + QUOTENAME(SC.name) + '.' + QUOTENAME(T.name) + ' WHERE ' + QUOTENAME(C.name) + ' LIKE ''%' + @SearchString + '%'' HAVING COUNT(*)>0 UNION ALL ' +CHAR(13) + CHAR(10) FROM sys.columns C JOIN sys.tables T ON C.object_id=T.object_id JOIN sys.schemas SC ON SC.schema_id=T.schema_id -- AND SC.name = '' JOIN sys.types ST ON C.user_type_id=ST.user_type_id JOIN sys.types SYST ON ST.system_type_id=SYST.user_type_id AND ST.system_type_id=SYST.system_type_id WHERE SYST.name IN ('varchar','nvarchar','text','ntext','char','nchar') ORDER BY T.name, C.name -- Strip off the last UNION ALL IF LEN(@SQL)>12 SELECT @SQL=LEFT(@SQL,LEN(@SQL)- 12) EXEC(@SQL) --PRINT @SQL
참고: https://www.sqlmatters.com/Articles/Searching%20all%20columns%20in%20all%20tables%20in%20a%20database.aspx
-
==============================
5.나는 하위 쿼리를 사용하여 호세 에르난데스 나란의 대답을 읽은 후 빠른 방법을 찾아 냈다. 이것은 우리가 데이터베이스에 여분의 열을 추가 할 필요가 없다는 장점이있다.
나는 하위 쿼리를 사용하여 호세 에르난데스 나란의 대답을 읽은 후 빠른 방법을 찾아 냈다. 이것은 우리가 데이터베이스에 여분의 열을 추가 할 필요가 없다는 장점이있다.
하자, 우리는 열이있는 테이블 사람이 PersonID 모두 검색 및 outputet해야 장소를 포함한 전체 이름이어야합니다 FIRSTNAME, 이름, 핸드폰, 이메일 및 장소, 가정합니다. 코드는 다음과 같은 방법을 살펴보다 :
SELECT Firstname, Name, Place FROM person NATURAL JOIN (SELECT PersonID, CONCAT(Firstname, ' ', Name, ' ', Cellphone, ' ', Email, ' ', Place) search_string FROM person) as all_in_one WHERE search_string LIKE '%Hans%' AND search_string LIKE '%Muster%'
당신이 PHP와 같은 다른 언어에서 SQL을 사용하는 경우 루프를 사용하여 WHERE, 당신은 뒤에 부분을 추가 할 수 있습니다. PHP에서 예를 들어 여기 :
$q = $_GET['q']; $words = explode(" ", $q); foreach($words as $word){ if(is_null($search_query)){ $search_query = "search_string LIKE '%$word%'"; }else{ $search_query .= " AND search_string LIKE '%$word%'"; } }
(주의 :이 예는 잠재적으로 SQL 주입에 사용 될 수있는 GET 변수의 체크를하지 않습니다.)
-
==============================
6.나는 프로젝트 전에 않았다. SQL의 모든 열을 검색 할 수있는 가장 좋은 방법은 각 열 텍스트를 테이블에 새 열을 생성하고 붙여 넣기하는 것입니다 / IT에 데이터를 너무 좋아한다 :
나는 프로젝트 전에 않았다. SQL의 모든 열을 검색 할 수있는 가장 좋은 방법은 각 열 텍스트를 테이블에 새 열을 생성하고 붙여 넣기하는 것입니다 / IT에 데이터를 너무 좋아한다 :
표: | ------------------------------------------------- - | | 1 열 | 2 열 | search_column | | ------------------------------------------------- - | | fooxxxxx | barxxxx | fooxxxxx barxxxx | -------------------------------------------------- - |
표 LIKE %의 키 워드 %에서 SELECT search_column
그것은 작동 및 SQL 코드를 많이 작성하지 않고 일을 가져옵니다. 또한 훨씬 더 빨리 이러한 유형의 쿼리를 실행하는 것입니다. 유일한 단점은 테이블을 업데이트하고 생성시 search_column이 생성되어야한다는 것이다.
from https://stackoverflow.com/questions/7922744/how-can-i-search-all-columns-in-a-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 쿼리 최신 가격을 얻으려면 (0) | 2020.07.05 |
---|---|
[SQL] SQL 서버의 열의 합계를 실행 얻는 방법 (0) | 2020.07.05 |
[SQL] 이유는 명시 적으로 SQL에서 "GROUP BY"절을 모든 열을 지정해야합니까 - 왜 안 "GROUP BY *"? (0) | 2020.07.05 |
[SQL] 데이터베이스 필드에서 특수 문자를 제거 (0) | 2020.07.05 |
[SQL] CSV 또는 Excel로 SQL 쿼리 결과 내보내기 (0) | 2020.07.05 |