กระทู้เก่าบอร์ด อ.Yeadram
8,496 14
URL.หัวข้อ /
URL
แยกคำนำหน้าและ ชื่อและนามสกุลที่เป็น Field เดียวกั
รบกวนผู้รู้ อยากทราบว่า วิธี
แยกคำนำหน้าและ ชื่อและนามสกุลที่เป็น Field เดียวกัน ให้แยกเป็นคนละ Field
โดยใช้ MS Access2007
แยกคำนำหน้าและ ชื่อและนามสกุลที่เป็น Field เดียวกัน ให้แยกเป็นคนละ Field
โดยใช้ MS Access2007
14 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R11865
2.1 หาตำแหน่งของคำนำหน้าก่อนครับว่า คำนำหน้านั้นมีกี่ตำแหน่ง
อันนี้อาจจะกำปั้นทุบดินไปหน่อย แต่ก็เข้าใจได้ง่ายที่สุด คือใช้ ตัดคำหน้ามาเช็คเลยครับ เอามาให้หมดทุกแบบ
อย่างถ้าจะเช็ค คำว่า นางสาว ก็ตัด 6 คำ จะเช็คคำว่า นาง ก็ตัด 3 คำครับ
** ต้องเช็คคำยาวก่อนนะครับ ไม่งั้นมันจะไปเจอคำสั้นก่อน เช่น นางสาวทัศนีย์ เงี้ย ถ้าเราเช็ค "นาง" ก่อน มันก็จะเจอก่อนแล้วจะตัดคำผิดครับ เพราะเราต้องการตัดคำว่า "นางสาว"
ผมเขียนอาจจะไม่ครบนะครับ แต่ใช้สูตรประมาณนี้
อาร์ม
www.ugetproject.com
อันนี้อาจจะกำปั้นทุบดินไปหน่อย แต่ก็เข้าใจได้ง่ายที่สุด คือใช้ ตัดคำหน้ามาเช็คเลยครับ เอามาให้หมดทุกแบบ
อย่างถ้าจะเช็ค คำว่า นางสาว ก็ตัด 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 ครับ
อาร์ม
www.ugetproject.com
คือตัดตั้งแต่ซ้ายมือถึง จำนวนคำที่เราได้ในสูตร 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
โค๊ตอาจจะยาวหน่อยนะครับ
จบแล้วครับ ไม่เข้าใจถามได้เลย
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
พอดีเป็นมือใหม่อ่ะค่ะ ได้ทำอันนี้เหมือนกันค่ะ
ตรงเครื่องหมาย : มันใช้ไม่ได้อ่ะค่ะ
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]
จากนั้นก๊อปไปวางตรงช่อง เขตข้อมูลครับ
เสร็จแล้วในสูตรที่ผมให้ไป เปลี่ยนตรง [name] เป็น [std_name]
จากนั้นก๊อปไปวางตรงช่อง เขตข้อมูลครับ
9 @R11873
แบบในรูปครับ พอดีชื่อฟิล์ที่เก็บชื่อของคุณ เบจิต้า เป็นชื่อ std_name แต่ในสูตผมเป็น name เลยต้องเปลี่ยนให้ตรงกันครับ
แบบในรูปครับ พอดีชื่อฟิล์ที่เก็บชื่อของคุณ เบจิต้า เป็นชื่อ std_name แต่ในสูตผมเป็น name เลยต้องเปลี่ยนให้ตรงกันครับ
10 @R11874
ถ้าจะแยกคำนำหน้า ชื่อ นามสกุล แต่ล่ะอันออกเป็นอย่างล่ะ query ล่ะค่ะ
คือ
คำนำหน้า 1 query
ชื่อ 1 query
นามสกุล 1 query
อ่ะค่ะ
คือ
คำนำหน้า 1 query
ชื่อ 1 query
นามสกุล 1 query
อ่ะค่ะ
11 @R11875
แยกเป็นหลาย query ได้ครับ เข้าใจว่าอยากจะให้โค๊ตดูง่ายใช่มั้ยครับ งั้นลองดูครับ
query1 : หาแค่ นามสกุล กับ จำนวนคำนำหน้า แ้ล้วก็ตำแหน่งของ space bar
query2 : เอาจำนวนคำนำหน้า และตำแหน่งของ space bar ใน query1 มาตัดคำนำหน้า กับ ชื่อ
2query พอครับ แต่ผมให้แค่แนวคิดนะครับ เพราะถึงทำให้ไป แล้วไม่เข้าใจ ก็ไปต่อไม่ได้อยู่ดี
ทางที่ดี ลองทำความเข้าใจ ที่ผมเขียนให้ไปแบบแรกดูครับ ค่อย ๆ เขียนไปทีละสูตร เด๋ว เป็นเอง สู้ ๆ ครับ
ถ้าจุดประสงค์สุดท้าย คือการเอา query ไปทำรายงาน ก็ไม่พ้นต้อง เลือกไปทำเพียง query เดียวครับ การแยก query กัน แล้วเอาไปรวมกันในตอนสุดท้ายเพื่อทำรายงานก็ทำได้ แต่ยุ่งยากและผมไม่แนะนำครับ
อาร์ม
www.ugetproject.com
query1 : หาแค่ นามสกุล กับ จำนวนคำนำหน้า แ้ล้วก็ตำแหน่งของ space bar
query2 : เอาจำนวนคำนำหน้า และตำแหน่งของ space bar ใน query1 มาตัดคำนำหน้า กับ ชื่อ
2query พอครับ แต่ผมให้แค่แนวคิดนะครับ เพราะถึงทำให้ไป แล้วไม่เข้าใจ ก็ไปต่อไม่ได้อยู่ดี
ทางที่ดี ลองทำความเข้าใจ ที่ผมเขียนให้ไปแบบแรกดูครับ ค่อย ๆ เขียนไปทีละสูตร เด๋ว เป็นเอง สู้ ๆ ครับ
ถ้าจุดประสงค์สุดท้าย คือการเอา query ไปทำรายงาน ก็ไม่พ้นต้อง เลือกไปทำเพียง query เดียวครับ การแยก query กัน แล้วเอาไปรวมกันในตอนสุดท้ายเพื่อทำรายงานก็ทำได้ แต่ยุ่งยากและผมไม่แนะนำครับ
อาร์ม
www.ugetproject.com
12 @R11876
ถ้าแยก คือว่า ถ้าคำนำหน้าชื่อมี Miss Mr. นาง นางสาว นาย
เราจะทำยังไงดีค่ะ ทำไม่ได้แล้วค่ะ นั่งทำจนปวดตาแล้วค่ะ
ช่วยหน่อยนะค่ะ ขอบคุณมากๆๆค่ะ
เราจะทำยังไงดีค่ะ ทำไม่ได้แล้วค่ะ นั่งทำจนปวดตาแล้วค่ะ
ช่วยหน่อยนะค่ะ ขอบคุณมากๆๆค่ะ
13 @R11879
ใช้ฟังก์ชั่น iif() เช็คเอาเลย ลองหาอ่านดูครับในเน็ตมีเยอะ
14 @R11880
ขอบคุณผู้รู้ค่ะ ที่ให้ความกระจ่าง กับมือใหม่ ค่ะ
Time: 0.2961s
ประมาณนี้หรือเปล่าครับ
ใช้ query ในการคำนวนครับ เริ่มจากง่ายก่อนนะครับ
1 นามสกุลแยกง่ายสุด เราต้องหาตำแหน่ง ของ space bar ว่าอยู่ตรงไหนของคำโดยใช้ InStrRev(name," ") ค้นหาจากข้างหลัง เมื่อได้ตำแหน่งของ space bar เราก็ +1 แล้วเริ่มตัดคำตั้งแต่ตำแหน่งนั้น ไปซัก 100 คำก็ได้ครับ เพราะนามสกุลไม่น่าจะเกินร้อยคำก็จบ
เขียนสูตรประมาณนี้ครับ
sername: Mid([name],InStrRev([name]," ")+1,100)
อาร์ม
www.ugetproject.com