Text.StartsWith ตรวจสอบว่าข้อความหลักขึ้นต้นด้วยข้อความย่อยที่กำหนดหรือไม่ โดยคืนค่า true หรือ false สามารถระบุ Comparer เพื่อเลือกว่าจะให้ตรวจสอบแบบ Case Sensitive (ไว) หรือ Case Insensitive (ไม่ไว) ได้
=Text.StartsWith(text as nullable text, substring as text, optional comparer as nullable function) as nullable logical
=Text.StartsWith(text as nullable text, substring as text, optional comparer as nullable function) as nullable logical
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| text | text | Yes | ข้อความหลักที่ต้องการตรวจสอบว่าขึ้นต้นด้วยข้อความย่อยหรือไม่ สามารถเป็น null ได้ | |
| substring | text | Yes | ข้อความย่อยที่ต้องการตรวจสอบว่าข้อความหลักขึ้นต้นด้วยข้อความนี้หรือไม่ | |
| comparer | function | Optional | Comparer.Ordinal | ฟังก์ชัน Comparer สำหรับการเปรียบเทียบ เช่น Comparer.Ordinal (case-sensitive) หรือ Comparer.OrdinalIgnoreCase (case-insensitive) หากไม่ระบุจะใช้ Comparer.Ordinal เป็นค่าเริ่มต้น |
เลือกเฉพาะรายการสินค้าที่รหัสขึ้นต้นด้วย "PROD" หรือ "SKU"
ถ้าข้อความในคอลัมน์ขึ้นต้นด้วย "Fruits" ให้จัดอยู่ในหมวดหมู่ผลไม้
Text.StartsWith("Hello World", "Hello")=Text.StartsWith("Hello World", "Hello")
true
Text.StartsWith("Hello World", "hello")=Text.StartsWith("Hello World", "hello")
false
Text.StartsWith("Apple Pie", "apple", Comparer.OrdinalIgnoreCase)=Text.StartsWith("Apple Pie", "apple", Comparer.OrdinalIgnoreCase)
true
let Products = Table.FromRecords({ [ProductCode = "PROD-001", ProductName = "Apple"], [ProductCode = "PROD-002", ProductName = "Banana"], [ProductCode = "SERV-0…let
Products = Table.FromRecords({
[ProductCode = "PROD-001", ProductName = "Apple"],
[ProductCode = "PROD-002", ProductName = "Banana"],
[ProductCode = "SERV-001", ProductName = "Consulting"],
[ProductCode = "PROD-003", ProductName = "Cherry"]
}),
OnlyProductCodes = Table.SelectRows(
Products,
each Text.StartsWith([ProductCode], "PROD-")
)
in
OnlyProductCodes
Table with 3 rows:
[ProductCode="PROD-001", ProductName="Apple"]
[ProductCode="PROD-002", ProductName="Banana"]
[ProductCode="PROD-003", ProductName="Cherry"]
ใช่ครับ เป็น Case Sensitive เมื่อไม่ระบุ Comparer parameter ดังนั้น Text.StartsWith(“Apple”, “apple”) จะคืนค่า false เพราะมันขึ้นต้นด้วย “A” ตัวพิมพ์ใหญ่ ไม่ใช่ “a” ตัวพิมพ์เล็ก
.
ถ้าต้องการให้ case-insensitive ต้องเพิ่มพารามิเตอร์ที่สามดังนี้ Text.StartsWith(“Apple”, “apple”, Comparer.OrdinalIgnoreCase) หรือสามารถแปลงข้อความก่อนเปรียบเทียบได้เช่น Text.StartsWith(Text.Lower(“Apple”), Text.Lower(“apple”)) ครับ
Text.StartsWith ตรวจสอบเฉพาะว่าข้อความขึ้นต้นด้วยข้อความย่อยที่กำหนดหรือไม่ ส่วน Text.Contains ตรวจสอบว่าข้อความใดจะมีข้อความย่อยนั้นอยู่ที่ไหนก็ได้ (ต้น กลาง ท้าย)
.
เช่น Text.StartsWith(“Hello World”, “World”) จะคืนค่า false เพราะ “World” ไม่ได้อยู่ที่ต้น แต่ Text.Contains(“Hello World”, “World”) จะคืนค่า true เพราะ “World” อยู่ในข้อความ 😎
ถ้า text parameter (ตัวแรก) เป็น null ฟังก์ชันจะคืนค่า null โดยไม่คืนค่า true หรือ false
.
ดังนั้นถ้าต้องการตรวจสอบและจัดการกรณี null ต้องเขียนเงื่อนไขพิเศษ เช่น each [Column] null and Text.StartsWith([Column], “Prefix”) เพื่อให้แน่ใจว่า [Column] ไม่เป็น null ก่อนทำการเปรียบเทียบ
Comparer.OrdinalIgnoreCase ทำการเปรียบเทียบแบบ ordinal (ตามลำดับไบต์) โดยไม่สนใจตัวพิมพ์เล็ก-ใหญ่ แต่ไม่ได้พิจารณา cultural differences
.
ส่วน Comparer.FromCulture(“th-TH”) ทำการเปรียบเทียบแบบ culture-aware ซึ่งอาจให้ผลลัพธ์ต่างกันเมื่อจัดการกับภาษาอื่น เช่น ภาษาไทย ส่วนตัวผมแนะนำให้ใช้ Comparer.OrdinalIgnoreCase สำหรับการเปรียบเทียบทั่วไป และ Comparer.FromCulture เมื่อต้องจัดการข้อมูลที่มีความสำคัญทางวัฒนธรรม 💡
ฟังก์ชัน Text.StartsWith เป็นฟังก์ชันพื้นฐานสำหรับตรวจสอบว่าข้อความหลักขึ้นต้นด้วยข้อความย่อย (substring) ที่กำหนดหรือไม่ โดยจะคืนค่าเป็น true หากขึ้นต้นตรงกัน และ false หากไม่ตรงกัน เมื่อข้อความหลักเป็น null ฟังก์ชันจะคืนค่า null
ที่เจ๋งคือเราสามารถควบคุมว่าจะให้ตรวจสอบแบบ Case Sensitive (แยกตัวพิมพ์เล็ก-ใหญ่) หรือ Case Insensitive (ไม่แยก) ได้โดยใช้พารามิเตอร์ Comparer ซึ่งทำให้ยืดหยุ่นมากในการตรวจสอบข้อความ 😎
ส่วนตัวผมใช้ฟังก์ชันนี้บ่อยมากเมื่อต้องการกรองข้อมูลตามคำขึ้นต้น เช่น กรองรหัสสินค้าที่ขึ้นต้นด้วย “PROD-” หรือกรองชื่อลูกค้าที่ขึ้นต้นด้วยอักษรบางตัว โดยมักใช้ร่วมกับ Table.SelectRows เพื่อสร้าง filter condition ที่ซับซ้อน