แยกคำนำหน้าและ ชื่อและนามสกุลที่เป็น Field เดียวกั
กระทู้เก่าบอร์ด อ.Yeadram

 8,494   14
URL.หัวข้อ / URL
แยกคำนำหน้าและ ชื่อและนามสกุลที่เป็น Field เดียวกั

รบกวนผู้รู้ อยากทราบว่า วิธี

แยกคำนำหน้าและ ชื่อและนามสกุลที่เป็น Field เดียวกัน ให้แยกเป็นคนละ Field

โดยใช้ MS Access2007

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

1 @R11864


ประมาณนี้หรือเปล่าครับ

ใช้ query ในการคำนวนครับ เริ่มจากง่ายก่อนนะครับ
1 นามสกุลแยกง่ายสุด เราต้องหาตำแหน่ง ของ space bar ว่าอยู่ตรงไหนของคำโดยใช้ InStrRev(name," ") ค้นหาจากข้างหลัง เมื่อได้ตำแหน่งของ space bar เราก็ +1 แล้วเริ่มตัดคำตั้งแต่ตำแหน่งนั้น ไปซัก 100 คำก็ได้ครับ เพราะนามสกุลไม่น่าจะเกินร้อยคำก็จบ

เขียนสูตรประมาณนี้ครับ
sername: Mid([name],InStrRev([name]," ")+1,100)

อาร์ม
www.ugetproject.com
2 @R11865
2.1 หาตำแหน่งของคำนำหน้าก่อนครับว่า คำนำหน้านั้นมีกี่ตำแหน่ง
อันนี้อาจจะกำปั้นทุบดินไปหน่อย แต่ก็เข้าใจได้ง่ายที่สุด คือใช้ ตัดคำหน้ามาเช็คเลยครับ เอามาให้หมดทุกแบบ

อย่างถ้าจะเช็ค คำว่า นางสาว ก็ตัด 6 คำ จะเช็คคำว่า นาง ก็ตัด 3 คำครับ
** ต้องเช็คคำยาวก่อนนะครับ ไม่งั้นมันจะไปเจอคำสั้นก่อน เช่น นางสาวทัศนีย์ เงี้ย ถ้าเราเช็ค "นาง" ก่อน มันก็จะเจอก่อนแล้วจะตัดคำผิดครับ เพราะเราต้องการตัดคำว่า "นางสาว"

ผมเขียนอาจจะไม่ครบนะครับ แต่ใช้สูตรประมาณนี้
num_prename: IIf(Left([name],6)="นางสาว" Or Left([name],6)="สิบเอก",6,IIf(Left([name],3)="นาย" Or Left([name],3)="นาง",3,0))

อาร์ม
www.ugetproject.com
3 @R11866
2.2 พอได้จำนวนคำนำหน้าจากสูตร 2.1 แล้ว ทีนี้เราก็ตัดคำนำหน้าได้แล้วครับ โดยใช้ ฟังก์ชั่น left("ข้อความที่จะตัด",จำนวนคำที่จะตัดเริ่มจากซ้ายมือ)

คือตัดตั้งแต่ซ้ายมือถึง จำนวนคำที่เราได้ในสูตร 2.1 ครับ

prename: Left([name],IIf(Left([name],6)="นางสาว" Or Left([name],6)="สิบเอก",6,IIf(Left([name],3)="นาย" Or Left([name],3)="นาง",3,0)))

อาร์ม
www.ugetproject.com
4 @R11867
(ขอโทษที่ช้าคับ บอร์ดคิดว่าผมเป็น spam ซะงั้นไม่ยอมให้โพส ต่อเลยนะครับ)

3. สุดท้ายเราก็ตัดชื่อครับ โดยใช้ฟังก์ชั่น mid("คำที่จะตัด",ตำแหน่งที่เริ่มตัด,จำนวนคำที่จะตัด)

ตำแหน่งที่เริ่มตัด=จำนวนคำนำหน้า + 1
จำนวนคำที่จะตัด=(ตำแหน่งเราหา space bar ได้ในข้อ 1)-(จำนวนคำนำหน้า)-1

โค๊ตอาจจะยาวหน่อยนะครับ
firstname: Mid([name],IIf(Left([name],6)="นางสาว" Or Left([name],6)="สิบเอก",6,IIf(Left([name],3)="นาย" Or Left([name],3)="นาง",3,0))+1,InStrRev([name]," ")-IIf(Left([name],6)="นางสาว" Or Left([name],6)="สิบเอก",6,IIf(Left([name],3)="นาย" Or Left([name],3)="นาง",3,0))-1)

จบแล้วครับ ไม่เข้าใจถามได้เลย
5 @R11869


ตรงเครื่องหมาย : มันใช้ไม่ได้อ่ะค่ะ

sername: Mid([name],InStrRev([name]," ")+1,100)

ถ้าจะแยกคำนำหน้า    ชื่อ   นามสกุล   แต่ล่ะอันออกเป็นอย่างล่ะ query ล่ะค่ะ

คือ คำนำหน้า 1 query
      ชื่อ            1 query
      นามสกุล      1 query

พอดีเป็นมือใหม่อ่ะค่ะ ได้ทำอันนี้เหมือนกันค่ะ
6 @R11870
ทำไมถึงใช้ไม่ได้อ่ะครับ มัน error เหรอครับ save หน้าจอมาให้ดูหน่อยครับ เด๋วผมดูให้
7 @R11871
นี่อ่ะค่ะ มันขึ้นแบบนี้ต้องแก้ไขยังไงค่ะ



8 @R11872
อ้อรู้แล้วครับ ก่อนอื่น ก๊อปสูตรลง notepad ก่อนก็ได้ครับ

เสร็จแล้วในสูตรที่ผมให้ไป เปลี่ยนตรง [name] เป็น [std_name]

จากนั้นก๊อปไปวางตรงช่อง เขตข้อมูลครับ
9 @R11873


แบบในรูปครับ พอดีชื่อฟิล์ที่เก็บชื่อของคุณ เบจิต้า เป็นชื่อ std_name แต่ในสูตผมเป็น name เลยต้องเปลี่ยนให้ตรงกันครับ
10 @R11874
ถ้าจะแยกคำนำหน้า    ชื่อ   นามสกุล   แต่ล่ะอันออกเป็นอย่างล่ะ query ล่ะค่ะ

คือ
     
คำนำหน้า 1 query

ชื่อ 1 query

นามสกุล 1 query

อ่ะค่ะ



11 @R11875
แยกเป็นหลาย query ได้ครับ เข้าใจว่าอยากจะให้โค๊ตดูง่ายใช่มั้ยครับ งั้นลองดูครับ

query1 : หาแค่ นามสกุล กับ จำนวนคำนำหน้า แ้ล้วก็ตำแหน่งของ space bar
query2 : เอาจำนวนคำนำหน้า และตำแหน่งของ space bar ใน query1 มาตัดคำนำหน้า กับ ชื่อ

2query พอครับ แต่ผมให้แค่แนวคิดนะครับ เพราะถึงทำให้ไป แล้วไม่เข้าใจ ก็ไปต่อไม่ได้อยู่ดี

ทางที่ดี ลองทำความเข้าใจ ที่ผมเขียนให้ไปแบบแรกดูครับ ค่อย ๆ เขียนไปทีละสูตร เด๋ว เป็นเอง สู้ ๆ ครับ

ถ้าจุดประสงค์สุดท้าย คือการเอา query ไปทำรายงาน ก็ไม่พ้นต้อง เลือกไปทำเพียง query เดียวครับ การแยก query กัน แล้วเอาไปรวมกันในตอนสุดท้ายเพื่อทำรายงานก็ทำได้ แต่ยุ่งยากและผมไม่แนะนำครับ

อาร์ม
www.ugetproject.com
12 @R11876
ถ้าแยก คือว่า ถ้าคำนำหน้าชื่อมี Miss Mr. นาง นางสาว นาย

เราจะทำยังไงดีค่ะ ทำไม่ได้แล้วค่ะ นั่งทำจนปวดตาแล้วค่ะ

ช่วยหน่อยนะค่ะ   ขอบคุณมากๆๆค่ะ
13 @R11879
ใช้ฟังก์ชั่น iif() เช็คเอาเลย ลองหาอ่านดูครับในเน็ตมีเยอะ
14 @R11880
ขอบคุณผู้รู้ค่ะ ที่ให้ความกระจ่าง กับมือใหม่ ค่ะ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2508s