27/08/2024
CÂU LỆNH SELECT TỰ NHIÊN
💐Trên thực tế, mọi người đã làm quen với Query thì rất ngán ngẩm kiểu SELECT A, B, C.. Lúc kiểm tra lại, ta cứ phải đi mò nọ, mò kia. Tức khủng khiếp. Do vậy, các nhà phát triển phải dùng chiêu viết hàm trung gian là MYSELECT.
💐Trình tự các bước như sau:
𝟏. 𝐕𝐢ế𝐭 𝐡à𝐦 𝐌𝐲𝐒𝐞𝐥𝐞𝐜𝐭
Nội dung hàm này, mình sẽ copy ở cuối trang.
2. 𝓠𝓾𝔂 đổ𝓲 𝓬â𝓾 𝓵ệ𝓷𝓱
- Đặt tên vùng dữ liệu. VD: MyData
- Viết SQL chuẩn: SELECT [FieldName1],[FieldName2][FieldName4],... Nói chung, đây là tên trường bất kỳ có ngoặc vuông.
VD: SELECT [STT],[Ngay],[Quy],[Tien]
- Sử dụng MYSELECT: MYSELECT("Câu lệnh SQL chuẩn", Tên vùng)
VD: =MYSELECT("SELECT [STT],[Ngay],[Quy],[Tien]"; MyData)
---------> Tại ô A1 sẽ là =SELECT Col1,Col3,Col4,Col5
3.𝓣𝓻𝓾𝔂 𝓿ấ𝓷
Cú pháp: Query (Vùng; "SQL đã xử lý"; 1)
VD: =Query ({MyData}; A1; 1) ---> Điều tuyệt vời sẽ đến.
4.Đá𝓷𝓱 𝓰𝓲á
- Select câu tự nhiên, dễ check được lỗi.
- Generate câu lệnh hơi chút xíu nhưng chỉ là lần đầu, khi dùng lại ta coi đó là text bình thường.
𝟧.𝒫𝐻Ụ 𝐿Ụ𝒞
function MYSELECT(sqlstring,headersrange) {
let text = sqlstring
let headers = headersrange[0]
let results = text.matchAll(/\[.*?\]/g)
let matches = [...results].map(match => match[0])
// [name], [salary], [dept], [salary]
let uniqueMatches = [...new Set(matches)]
//console.log(uniqueMatches)
// [name], [salary], [dept]
let pos
let regextext
uniqueMatches.forEach(match=>{
//console.log(match)
pos = headers.indexOf(match.slice(1,-1))
//console.log(pos)
if(pos !== -1){
regextext = `\\[${match.slice(1,-1)}\\]`
console.log(regextext)
text = text.replace(new RegExp(regextext,"g"),`Col${pos+1}`)
}
})
return text
}