.NET Logo
Welcome Guest Search | Active Topics | Members | Log In | Register

ขอถาม เกี่ยวกับการ ลบ วันที่หน่อยคับ Options · View
zerozaaa
Posted: Saturday, September 13, 2008 4:31:09 PM
Rank: มือพระกาฬ
Groups: Member

Joined: 6/13/2008
Posts: 79

ในฐานข้อมูล มีข้อมูลที่เป็น Nvachar  อย่างเช่น 10/09/2551
ผมต้องการเอาออกมา ลบ กับ วันที่ที่เป็นปัจจุบันคับ ว่าวันต่างกันกี่วัน คับ

nuttaponp
Posted: Monday, September 15, 2008 8:31:45 AM
Rank: มือพระกาฬ
Groups: Member

Joined: 9/9/2008
Posts: 62


ถ้าข้อมูลที่เป็น NVarchar อยู่ในรูปของวันที่เราสามารถใช้ SQL ดึงข้อมูลออกมาเป็นได้เลยว่าต่างกันกี่วันโดยใช้ฟังขั่น DATEDIFF() ใน SQL
โดยฟังชั่นนี้มีรูปแบบคือ DATEDIFF(<datepart>, <startdate>, <enddate>)
โดยที่ datepart คือหน่วยของเวลาที่จะลบ เช่น ชั่วโมง-hour, วัน-day, สัปดาห์-week

สมมติผมมี table1 จะดึงข้อมูลจำนวนวันที่ต่างในคอลัมน์ adate กับปัจจุบัน เราจะได้ คำสั่ง SELECT คือ
select datediff(day,adate,getdate()) from table1

ตัวอย่างการใช้งานใน C# เอาข้อมูลไปใส่ใน dataGridView

            string strQuery = "select datediff(day,adate,getdate()) from table1"
            string strConn = @"Data Source=yourserver;Initial Catalog=yourdatabase;Integrated Security=True";
 
            SqlCommand Comm = new SqlCommand(strQuery, strConn);

            SqlDataAdapter da = new SqlDataAdapter(Comm);
            DataSet ds = new DataSet();
            da.Fill(ds, "table1");
            dataGridView1.DataSource = ds.Tables["table1"];

*ข้อควรระวัง ใน  SQL วันที่มักจะอยู่ในรูป เดือน/วัน/ปี เช่น 09/15/2008 ก็คือ วันที่ 15 เดือนกันยายน ปี2008 เช็คให้ดีนะครับ
 

zerozaaa
Posted: Monday, September 15, 2008 7:02:56 PM
Rank: มือพระกาฬ
Groups: Member

Joined: 6/13/2008
Posts: 79

ขอบคุณคับ

DATEDIFF(<datepart>, <startdate>, <enddate>)
อย่างผมมีข้อมูลอยู่ชุดเดียว จะทำยังไงคับ  สมุทติอยู่ใน table  ชื่อว่า order    มี fied ชื่อว่า date คับมีข้อมูลเก็บเป็น Nvarchar คับ
เป็น  วัน /เดือน /ปี    คับ  จะเขียนอย่างไหรคับ

nuttaponp
Posted: Monday, September 15, 2008 10:15:51 PM
Rank: มือพระกาฬ
Groups: Member

Joined: 9/9/2008
Posts: 62


ถ้าคุณเก็บข้อมูลเป็นแบบ yyyymmdd แล้วล่ะก็สามารถใช้ตัวอย่างของผมข้างต้นได้ทันทีครับ แค่เปลี่ยน
string strQuery = "select datediff(day,[date],getdate()) from order"


แต่ถ้าคุณอยากจะเก็บเป็นแบบ dd/mm/yyyy อาจจะยุ่งยากนิดนึง เพราะมันไม่แน่นอนว่า Server ของคุณเก็บข้อมูลเป็นรูปแบบไหน ซึ่งอาจจะเป็น แบบ mm/dd/yyyy ก็ได้ ซึ่งจะทำให้เกิดความผิดพลาดได้ ผมแนะนำว่าให้เก็บแบบที่ผมบอกดีกว่าคือ yyyymmdd

ถ้าคุณยังยืนยันจะเก็บแบบนี้ (dd/mm/yyyy) ผมมีวิธีคืออ่านข้อมูลแล้วนำข้อมูลที่อ่านได้มาสลับกันใหม่ให้เป็นแบบที่ต้องการแล้ว Convert ให้เป็นข้อมูลชนิด DateTime แล้วใช้DATEDIFF หาความแตกต่างของวันอีกที

จากตัวอย่างก็จะได้
string strQuery = "select datediff(day,cast(substring([date],7,4)" +
                               "+substring([date],4,2)+substring([date],1,2)" +
                               " as datetime),getdate())";

ที่เหลือเหมือนเดิมครับ
 

**ตัวอย่างทั้งหมดนี้ผมทดสอบกับ SQL Server 2000 แล้วได้ผลครับ

 

Users browsing this topic
Guest


Forum Jump
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.

Main Forum RSS : RSS

YAFVision Theme Created by Jaben Cargman (Tiny Gecko)
Powered by Yet Another Forum.net version 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.


Sponsored by