programing

Excel에서 SQL 문을 생성하기 위한 트릭

muds 2023. 7. 20. 22:11
반응형

Excel에서 SQL 문을 생성하기 위한 트릭

다양한 데이터 가져오기 시나리오에서 주로 INSERT인 SQL 문을 Excel로 생성하는 요령이 있습니까?

식으로 공식을 쓰는 것이 정말 지겨워요.

="INSERT INTO Table (ID, Name) VALUES (" & C2 & ", '" & D2 & "')"

세미콜론은 닫는 괄호가 있는 마지막 이중 따옴표 안에 있어야 합니다.문자열 주위에 작은 따옴표를 추가할 때는 선택한 셀 외부에 추가해야 합니다.

(가시성을 위해 공간 추가 - 삽입 전 제거)

=CONCATENATE("insert into table (id, name) values (",C2,",' ",D2," ');")

다음은 다른 보기입니다.

=CONCATENATE("insert into table (id, date, price) values (",C3,",'",D3,"',",B3,");")

때때로 저는 SQL 명령을 연결로 빌드하는 대신 SQL 명령의 패턴을 대체하기 위해 대체를 사용합니다.데이터가 A열과 B열에 있다고 가정합니다.맨 위 행을 삽입합니다.C1 셀에 패턴을 사용하여 SQL 명령을 배치합니다.

insert into table t1 values('<<A>>', '<<B>>')

그런 다음 2행에 Excel 공식을 놓습니다.

=SUBSTITUTE(SUBSTITUTE($C$1, "<<A>>", A2), "<<B>>", B2)

셀 지정을 합니다.$C$1패턴을 파악할 수 있습니다.특히 char 또는 varchar로 작업하고 연결에서 단일 따옴표와 이중 따옴표를 혼합해야 할 때 유용합니다.비교:

=concatenate("insert into table t1 values '", A2, "', '", B2, "')"

저를 한 번 이상 괴롭힌 또 다른 문제는 007과 같은 선행 0이 있는 것을 제외하고는 숫자로 된 일부 문자나 막대를 처리하기 위해 엑셀을 사용하려고 하는 것입니다.엑셀은 숫자 7로 변환될 것입니다.

저는 Excel에서 SQL 삽입을 만들기 위해 String connection 메서드를 사용하곤 했습니다.잘 작동할 수 있지만 약간의 시간이 소요될 수도 있고 '신중하게' 작동할 수도 있습니다.

나는 엑셀에서 삽입물을 더 쉽게 생성할 수 있는 엑셀 애드인을 만들었습니다.

(페이지 하단의 비디오 참조) http://www.howinexcel.com/2009/06/generating-sql-insert-statements-in-excel.html

http://www.querycell.com/SQLGenerator.html

http://www.oneclickcommissions.com/excel-statement.html

VBA 접근 방식은 다음과 같습니다. 문자열을 선언하고 SQL 문을 다음과 같이 할당합니다.

dim SqlString as String
SqlString = "SELECT * FROM %1 WHERE (var=%2)"
SqlString = Replace("%1", "Table_Name")
SqlString = Replace("%2", ""value"")

은 비슷하지만 Excel , 음을사니다합용슷을 사용합니다.SUBSTITUTE기능.

SQL 텍스트를 쉽게 읽을 수 있게 하고 성가신 문제와 연관된 문제를 모두 방지하기 때문에 이 접근 방식을 선호합니다.네, 감방이 하나 더 필요하지만 감사 추적을 할 가치가 있습니다.

나는 이 고통을 압니다.결국 블로그에 두 이나 을 올렸습니다.
저는 다양한 셀과 여러 옵션을 연결하는 UDF를 만들었습니다.이렇게 하면 항상 쉼표로 값을 구분할 수 있지만 필요에 따라 작은 따옴표 및/또는 괄호를 추가할 수도 있습니다.

그래서, 당신은 sql 문의 쉬운 부분을 씁니다.

INSERT INTO table
VALUES /*string that we don't want to type by hand*/

또는

SELECT *
FROM table
WHERE foo IN (/*another string I don't want to type out*/)

그리고 아래의 사용자 지정 엑셀 함수는 스프레드시트 범위의 값을 멋진 문자열로 변환해 줍니다.

Function SQLConcat(rng As Range, Optional quoted As Boolean = False, Optional parenthesis As Boolean = False) As String
' ***************************************************************
' * Returns a comma separated list for use in SQL IN statements *
' * Params *
' * - rng: Range of cells to concatenate *
' * - quoted: True/False. If true, values are placed inside *
' * of single quotes. Default of false *
' * - parenthesis: Boolean. *
' * Useful for INSERT INTO tbl VALUES(53),(90),(397) *
' * *
' * Author: Christopher J. McClellan *
' * Published under Creative Commons Attribution-Share Alike *
' * http://creativecommons.org/licenses/by-sa/3.0/ *
' * You are free to change, distribute, and pretty much do *
' * whatever you like with the code, but you must give credit *
' * to the original author and publish any derivitive of this *
' * code under the same license. *
' ***************************************************************

Dim tmp As String 'temporary string
Dim row As Long 'first cell is special case
row = 0 'initalize row count
Dim c As Object 'cell
Dim txtwrapperLeft As String, txtwrapperRight As String

If quoted = True And parenthesis = False Then
 txtwrapperLeft = "'"
 txtwrapperRight = "'"
ElseIf quoted = True And parenthesis = True Then
 txtwrapperLeft = "('"
 txtwrapperRight = "')"
ElseIf quoted = False And parenthesis = True Then
 txtwrapperLeft = "("
 txtwrapperRight = ")"
Else
'quoted = false and parenthesis = false
 txtwrapperLeft = ""
 txtwrapperRight = ""
End If

For Each c In rng.Cells
 If row = 0 Then
 tmp = txtwrapperLeft & c.Value & txtwrapperRight
 Else
 tmp = tmp & "," & txtwrapperLeft & c.Value & txtwrapperRight
 End If
 row = row + 1
 Debug.Print tmp
Next c

'return
SQLConcat = tmp
End Function

어제 이러고 있었는데, 네, 견적을 맞추는 게 짜증나요.제가 한 일은 하나의 인용문을 포함하는 이름이 붙은 세포를 가진 것이었습니다.A1에 입력="'"(등수, 이중따옴표, 단일따옴표, 이중따옴표) 그런 다음 맨 아래 도구 모음 왼쪽의 상자에 해당 셀을 입력하여 이 셀의 이름을 "QOUTE"로 지정합니다.

때때로 SQL Insert를 구축하는 것이 가장 쉬운 방법인 것 같습니다.하지만 금방 싫증이 나고, 매크로/VBA 프로그래밍 외에는 "똑똑한" 방법이 없다고 생각합니다.

Excel을 피하고 다른 아이디어를 살펴보시기 바랍니다.

  • 액세스 사용(훌륭한 csv 가져오기 필터, 그런 다음 DB 테이블로 연결하고 액세스가 삽입을 처리하도록 허용)
  • Toad 사용(열을 혼합하고 일치시킬 수 있으며 클립보드에서 가져올 수도 있으므로 가져오기 기능이 더욱 향상됨)
  • SQL Loader(사용하기가 다소 까다롭지만 빠르고 유연함)를 사용합니다.

엑셀 파일을 csv로 내보내는 것도 대안이 될 수 있습니다. (빌 크라윈의 게시물 참조 - 새로운 포스터로서, 저는 아직 코멘트를 추가할 수 없습니다.)그러나 날짜 필드의 형식을 yyyy-mm-dd로 변경해야 합니다. 그렇지 않으면 날짜 열에 모두 00/00/00이 표시됩니다. MySQL은 Microsoft Excel과 다른 날짜 형식을 사용하기 때문입니다.또는 OpenOffice를 사용하여 csv 파일을 저장합니다.

ACE/Jet(예: ACE/Jet)을 사용하여 Excel 워크북의 데이터를 조회하고 소스에 삽입하는 것은 어떻습니까?액세스) SQL?이를 위해서는 ACE/Jet가 필요하며, 이는 다른 Excel 스프레드시트일 수 있습니다.다음은 간단한 예입니다.

INSERT INTO 
   [ODBC;Driver={SQL Server};SERVER=MYSERVER;DATABASE=MyDatabase;UID=sa;Pwd=mypassword;].MyTable (ID, Name)
SELECT F1, F2
  FROM 
   [Excel 8.0;HDR=NO;IMEX=1;Database=C:\db.xls;].[Sheet1$A1:B4];

sql 표에 데이터 삽입의 경우

=CONCATENATE("INSERT INTO `database_name`.`table_name`(`Column_Name`,`Column_Name`) VALUES ( '",A1,"',",B1,"); ")

언급URL : https://stackoverflow.com/questions/315504/tricks-for-generating-sql-statements-in-excel

반응형