แสดงบทความที่มีป้ายกำกับ SQL แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ SQL แสดงบทความทั้งหมด

20 เมษายน 2554

เรียงลำดับ ตัวเลข ในกรณีที่ไม่ได้เป็นชนิด int

    เมื่อเราทำการ เลือกข้อมูลจากฐานข้อมูลแล้ว ต้องการที่จะให้มันเรียงลำดับ เช่น
ในฐานข้อมูล ตารางคะแนน มีอยู่หนึ่ง ฟิวล์  เป็นชนิด text  มีคะแนน  1 2 3 4 10 11 21 ตามลำดับ

เมื่อเราเขียน SQL ก็จะได้ว่า
   SELECT *  FROM  tbl_test  ORDER BY score DESC 
มันจะเรียงลำดับให้เป็น  1 11 2 21 3 4 ถ้าหากต้องการจะให้มันเรียงลำดับเป็น 1 2 3 4 10 11 21
เปลี่ยน SQL ให้เป็นดังนี้ 
  SELECT * FORM tbl_test ORDER BY ABS(score) DESC

* คำสั่ง  ABS()  ใช้สำหรับหาค่าสัมบูรณ์

17 ธันวาคม 2553

SQL การจัดรูปแบบวันที่ ก่อนนำมาแสดง

ด้วยคำสั่งต่อไปนี้

SELECT DATE_FORMAT( inv_datecreate, '%Y-%m-%d')  AS date FROM `stock_inventory`

เป็นการจัดรูปแบบของฟิวล์  inv_datecreate ซึ่งมีรูปแบบ  2010-12-17 11:05:43  พอเรา query ข้อมูลออกมาด้วยคำสั่ง SQL ด้านบน จะแสดงข้อมูลเป็น

2010-12-17  เท่านั้น

ดูรายละเอียดอื่น ๆ ได้ที่ http://www.w3schools.com/SQL/func_date_format.asp

17 กันยายน 2553

SQL เลือก ฟิววันที่ล่าสุด ของ อุปกรณ์แต่ละไอดี ที่ต้องการ

 จากภาพข้างบน หากจะเอาวันที่่ล่าสุดของ product_bind_id ซึ่งมันจะนำวันที่ล่าสุดมา แต่จะไม่เอา status_id ตามวันที่ล่าสุดมา
  แต่่หากจะเอามาต้องจะต้องมี SQL ดังข้างล่างครับ


SELECT tbl_check.check_date, tbl_check.product_bind_id, tbl_check.status_id
FROM tbl_check INNER JOIN tbl_product_bind  ON (tbl_check .product_bind_id = tbl_product_bind.product_bind_id)
WHERE  (tbl_check.product_bind_id, check_date) IN
 ( SELECT product_bind_id, MAX(check_date) FROM tbl_check GROUP BY product_bind_id)

จาก : http://stackoverflow.com/questions/121387/sql-fetch-the-row-which-has-the-max-value-for-a-column

หรืออีกหนึ่งทางเลือกจากพี่ปลาทู


select * FROM tbl_check WHERE tbl_check.check_date IN ( SELECT MAX(tcheck.check_date) FROM tbl_check tcheck GROUP BY tcheck.product_bind_id  );
 
 

10 กรกฎาคม 2553

คำสั่งที่ใช้ในการเปลี่ยนรูปแบบวันที่ ใน SQL

เมื่อเราเก็บวันที่ในรูปแบบ 10-05-2010 หากเราทำการค้นหา โปรแกรมจะมองเห็นแค่ 2 ตัวแรก

ซึ่งเราต้องทำให้มันอยู่ในรูปแบบของฟอร์แมต เครื่อง คือ 2010-05-10 เสียก่อน ถึงจะทำการค้นหาได้ถูกต้อง

คำสั่งข้างล่างจะทำการเปลี่ยนรูปแบบวันที่ก่อนนำไปค้นหา

จาก text_date_field = 10-05-2010

CONCAT(SUBSTRING(`text_date_field` ,7 ,4) ,'-' ,SUBSTRING(`text_date_field` ,4 ,2) ,'-' ,SUBSTRING(`text_date_field` ,1 ,2))

เมื่อแปลงแล้วจะได้ 2010-05-10

14 มิถุนายน 2553

การเรียงลำดับตัวอักษรในภาษาไทย

หากในฐานข้อมูลคุณเป็นภาษาไทยแล้วอยากเรียงลำดับ  ก ข ค ง
สมมุติมีข้อมูล ก ,เข, เก, ข  ถ้าหากใช้คำสั่ง ORDER BY ธรรมดามันจะเรียง  ก,ข,เก,เข
แต่ถ้าหาำกว่าเราอยากจะเรียงเป็น ก,เก,ข,เข แล้วละก็ ใช้คำสั่งต่อไปนี้ครับ

SELECT * FROM tb_test ORDER BY CONVERT (NAME USING tis620);

เพื่อแปลงเป็น tis620 ก่อนครับ


ข้อมูลจาก บอร์ด thaicreate PHP ครับ

4 มิถุนายน 2553

บวกค่าชนิด Text ที่มีลูกน้ำคั่น ในคำสั่ง SQL

เมื่อได้ลองทำการบวกค่าที่อยู่ในฐานข้อมูลชนิด Text เช่น 1,000.00 กับค่า 20,000.00

SQL คือ SELECT (num1 + num2) as sumtotal FROM tbl_test

ผลลัพธ์ที่ได้มาคือ 21 ซึ่งมันจะมองเห็นตัวเลขข้างหน้าลูกน้ำ คือ 1 และ 20 มาบวกกันเท่านั้น

วิธีที่ผมใช้แก้ไข คือ

SELECT (REPLACE(num1,',','') + REPLACE(num2,',','')) as sumnew FROM tbl_test

- REPLACE(ค่าที่ต้องการแก้ไข,'ค่าที่ต้องการเปลี่ยน','ค่่าที่นำมาแทนที')

แล้วผลลัพธ์ที่ได้ คือ 21000

แต่ถ้าหาำกค่าที่อยู่ภายในฐานข้อมูลเรามีจุดทศนิยม เช่น 1,000.50 กับค่า 20,000.25

ผลลัพธ์ที่ได้ คือ 21.000.75

ซึ่งคำสั่งนี้จะเหมือนกับ str_replace ใน PHP ครับ