กระทู้เก่าบอร์ด อ.Yeadram
1,345 6
URL.หัวข้อ /
URL
แยกคำใน Field
row Field1
1 a,b,c,d
2 e,f
3 g,h,i,j,k,l
ต้องการให้แยกออกเป็น
row Field1 Field2 Field3 Field4 Field5 Field6 Field7
1 a,b,c,d a b c d
2 e,f e f
3 g,h,i,j,k,l g h i j k l
ขอบคุณครับ
1 a,b,c,d
2 e,f
3 g,h,i,j,k,l
ต้องการให้แยกออกเป็น
row Field1 Field2 Field3 Field4 Field5 Field6 Field7
1 a,b,c,d a b c d
2 e,f e f
3 g,h,i,j,k,l g h i j k l
ขอบคุณครับ
6 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R13310
รบกวนสอบถามเพิ่มเติมครับ หาก Field ที่แยกที่ค่าไม่คงที่อาจมีมากกว่า 7 Field และ ตัวอักษรที่อยู่ระหว่าง "," อาจมีตัวอักษรมากกว่า 1 ตัวอักษร เช่น
row Field1
1 ab,c,d
2 e,f
3 g,hij,kl,m,nop,qr,s
ต้องการให้แยกออกเป็น
row Field1 Field2 Field3 Field4 Field5 Field6 Field7 Field8
1 ab,c,d ab c d
2 e,f e f
3 g,hij,kl,m,nop,qr,s g hij kl m nop qr s
ต้องทำอย่างไรครับ
row Field1
1 ab,c,d
2 e,f
3 g,hij,kl,m,nop,qr,s
ต้องการให้แยกออกเป็น
row Field1 Field2 Field3 Field4 Field5 Field6 Field7 Field8
1 ab,c,d ab c d
2 e,f e f
3 g,hij,kl,m,nop,qr,s g hij kl m nop qr s
ต้องทำอย่างไรครับ
3 @R13313
สร้างฟังก์ชั่นขึ้นมาเองดีกว่าครับ เงือนไขมันยิบย่อยเกินไป
1 หาว่าในทุกๆ รายการของคุณ รายการใดที่มีจำนวนคอมม่า มากที่สุด จำนวนเท่าไหน เก็บค่าจำนวนสูงสุดไว้ ในตัวแปร MxComma
2 สั่งสร้างตารางใหม่ โดยโค้ด จำนวนฟิลด์ ให้มีเท่ากับ MxComma
3 select ข้อมูลดิบของคุณเข้า Recordset แล้ววนลูปเพื่อกระทำการตั้งแต่ เรคคอร์ดแรก จนเรคคอร์ดสุดท้าย
3.1 ใช้ฟังก์ชั่น split() ในแต่ละเรคคอร์ด แล้วเอาค่าที่ได้ มาต่อสายอักขระเป็น SQL Statement เพื่อเพิ่มข้อมูลเข้าตารางใหม่ ในแต่ละรอบของลูป
dim MxComma as long
Dim Rs as new adodb.recordset
dim conn as new adodb.connection
dim Sql as string
Dim arr()
Dim i as integer
rs.open "select idRow, Field1 from table1", conn, 1
rs.movefirst
do
arr = split(rs(1),",")
if ubound(arr) > MxComma then MxComma = ubound(arr)
rs.movenext
loop until rs.eof
sql = "CREATE TABLE tbOutput (RowID Long"
for i = 1 to MxComma
sql =sql & ", Field" & i & " Varchar(15)"
next
Conn.execute sql & ");"
dim strValue as string
rs.movefirst
do while not rs.eof
sql = "Insert into tbOutput(RowID"
strValue = ") Value(" & rs.absoluteposition
arr=split(rs(1),",")
for i = 0 to ubound(arr)
sql = sql & ", Field" & i+1
strValue = strValue & ", '" & arr(i) & "'"
next
conn.execute sql & strValue & ");"
rs.movenext
loop
rs.close
set rs=nothing
set conn= nothing
sql=""
strValue=""
i=0
' docmd.open actable, "tbOutput"
1 หาว่าในทุกๆ รายการของคุณ รายการใดที่มีจำนวนคอมม่า มากที่สุด จำนวนเท่าไหน เก็บค่าจำนวนสูงสุดไว้ ในตัวแปร MxComma
2 สั่งสร้างตารางใหม่ โดยโค้ด จำนวนฟิลด์ ให้มีเท่ากับ MxComma
3 select ข้อมูลดิบของคุณเข้า Recordset แล้ววนลูปเพื่อกระทำการตั้งแต่ เรคคอร์ดแรก จนเรคคอร์ดสุดท้าย
3.1 ใช้ฟังก์ชั่น split() ในแต่ละเรคคอร์ด แล้วเอาค่าที่ได้ มาต่อสายอักขระเป็น SQL Statement เพื่อเพิ่มข้อมูลเข้าตารางใหม่ ในแต่ละรอบของลูป
dim MxComma as long
Dim Rs as new adodb.recordset
dim conn as new adodb.connection
dim Sql as string
Dim arr()
Dim i as integer
rs.open "select idRow, Field1 from table1", conn, 1
rs.movefirst
do
arr = split(rs(1),",")
if ubound(arr) > MxComma then MxComma = ubound(arr)
rs.movenext
loop until rs.eof
sql = "CREATE TABLE tbOutput (RowID Long"
for i = 1 to MxComma
sql =sql & ", Field" & i & " Varchar(15)"
next
Conn.execute sql & ");"
dim strValue as string
rs.movefirst
do while not rs.eof
sql = "Insert into tbOutput(RowID"
strValue = ") Value(" & rs.absoluteposition
arr=split(rs(1),",")
for i = 0 to ubound(arr)
sql = sql & ", Field" & i+1
strValue = strValue & ", '" & arr(i) & "'"
next
conn.execute sql & strValue & ");"
rs.movenext
loop
rs.close
set rs=nothing
set conn= nothing
sql=""
strValue=""
i=0
' docmd.open actable, "tbOutput"
4 @R13326
คุณ yeadram มีวิธีที่ง่ายกว่านี้ไหมครับ อาจแล้วยังไม่เข้าใจครับ
ขอบคุณครับ
ขอบคุณครับ
5 @R13327
คุณ yeadram มีวิธีที่ง่ายกว่านี้ไหมครับ อ่านแล้วยังไม่เข้าใจครับ
ขอบคุณครับ
ขอบคุณครับ
6 @R13330
คิดไม่ออกครับ เท่าที่ความรู้ผมมี ผมว่า ไม่มีวิธีอื่นนอกจากนี้แล้วครับ
เพราะข้อมูลดิบ ของคุณมันไม่เป็นระบบ (เขาถึงต้องให้คุณ ผู้ซึ่งได้ชื่อว่า เป็นผู้จัดการฐานข้อมูล มาทำให้เป็นระบบไงครับ)
ข้อมูลดิบแบบนี้ แล้วอยากให้โปรยลงฟิลด์แบบนี้ โดยที่ไม่มีค่าคงที่ใดๆ ให้ควบคุมเลย ทุกอย่างเป็น Dinamic หมด ก็ต้องอย่างนี้แหละครับ
split() มันออกจากกันแล้วโปรยลง ฟิลด์
เพราะข้อมูลดิบ ของคุณมันไม่เป็นระบบ (เขาถึงต้องให้คุณ ผู้ซึ่งได้ชื่อว่า เป็นผู้จัดการฐานข้อมูล มาทำให้เป็นระบบไงครับ)
ข้อมูลดิบแบบนี้ แล้วอยากให้โปรยลงฟิลด์แบบนี้ โดยที่ไม่มีค่าคงที่ใดๆ ให้ควบคุมเลย ทุกอย่างเป็น Dinamic หมด ก็ต้องอย่างนี้แหละครับ
split() มันออกจากกันแล้วโปรยลง ฟิลด์
Time: 0.3049s
Field4 :left ([Field1],5,1) Field5 :left([Field1],7,1)
Field6 :left([Field1],9,1) Field7 :left([Field1],11,1)