แยกคำใน Field
กระทู้เก่าบอร์ด อ.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

ขอบคุณครับ

6 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R13282
Row      Field2 :left([Field1],1,1)     Field3 :left([Field1],3,1)
             Field4 :left ([Field1],5,1)    Field5 :left([Field1],7,1)
             Field6 :left([Field1],9,1)     Field7 :left([Field1],11,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

ต้องทำอย่างไรครับ
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"

4 @R13326
คุณ yeadram มีวิธีที่ง่ายกว่านี้ไหมครับ อาจแล้วยังไม่เข้าใจครับ

ขอบคุณครับ
5 @R13327
คุณ yeadram มีวิธีที่ง่ายกว่านี้ไหมครับ อ่านแล้วยังไม่เข้าใจครับ

ขอบคุณครับ
6 @R13330
คิดไม่ออกครับ เท่าที่ความรู้ผมมี ผมว่า ไม่มีวิธีอื่นนอกจากนี้แล้วครับ
เพราะข้อมูลดิบ ของคุณมันไม่เป็นระบบ (เขาถึงต้องให้คุณ ผู้ซึ่งได้ชื่อว่า เป็นผู้จัดการฐานข้อมูล มาทำให้เป็นระบบไงครับ)
ข้อมูลดิบแบบนี้ แล้วอยากให้โปรยลงฟิลด์แบบนี้ โดยที่ไม่มีค่าคงที่ใดๆ ให้ควบคุมเลย ทุกอย่างเป็น Dinamic หมด ก็ต้องอย่างนี้แหละครับ

split() มันออกจากกันแล้วโปรยลง ฟิลด์
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3049s