none
時間的相減與相減後間距的判別? RRS feed

  • 問題

  • 各位大大新年快樂!!

    小弟這裡有一個時間相減問題,希望各位大大不吝指教

    今天我DB裡面有記錄一個時間,我希望在我查詢某一筆資料時,

    當天時間可以與DB裡面的紀錄時間做比對!!

    比對後,可以用Label.TEXT顯示他的文字狀態

    EX:

    DB記錄時間為2007/1/1,今天我查詢該筆資料時間為2007/3/1

    之間差了60天,以相差60天為準,我希望在我查詢出來時,

    原本Label.TEXT為"聯繫"可以自動改成"失聯"

    請問,我在程式碼上該如何著手!!

    小弟寫的是WinFrm

    工具:vs2005

    DB:MS-SQL2005

     

     

     

     

     

     

    2007年2月24日 上午 08:18

解答

  • 你可以用 CASE 陳述式來做 .

    example:

    SELECT TxID, TxDate,
           CASE
                WHEN DATEDIFF(day, TxDate, GETDATE()) > 60 THEN 'More 60 day'
                ELSE 'Less or equal 60 day'
           END AS CheckState
    FROM   TxRecords ORDER BY TxDate DESC

    2007年2月24日 上午 11:19
    版主
  • 1. 不會就要學,SQL 指令在資料庫操作非常重要,還可以幫你省很多工。

    2.

               startday = DateTime.Parse(label7.Text);  //將系統時間字串轉換成DateTime
               endday = DateTime.Parse(label9.Text);   //將資料表欄位時間字串轉換成DateTime

               TimeSpan ts = startday - endday
             
               if(            ts.Days > 60          //這裡開始做判斷,但是不知怎麼判別時間相減後是否大於小於60
               {

                   label10.Text = "失聯";  //狀態顯示
               }

               else
               {

                   label10.Text = "聯繫";  //狀態顯示
              
               }

     

    2007年2月28日 上午 02:37
    版主

所有回覆

  • 你可以用 CASE 陳述式來做 .

    example:

    SELECT TxID, TxDate,
           CASE
                WHEN DATEDIFF(day, TxDate, GETDATE()) > 60 THEN 'More 60 day'
                ELSE 'Less or equal 60 day'
           END AS CheckState
    FROM   TxRecords ORDER BY TxDate DESC

    2007年2月24日 上午 11:19
    版主
  • 回覆小朱大大:

    底下為我的程式碼(C#)

     private void button1_Click(object sender, EventArgs e)
            {

     String str = "Data source=MIS_3;Initial catalog=TRY;Integrated Security=True";
                SqlConnection Conn = new SqlConnection(str);
                Conn.Open();

                String select1 = " Select Name,Tel,Org,Address,Note,Condition,Timeout From Customer  Where Tel='"+textBox2.Text + "' ";
               
                SqlDataAdapter adapter1 = new SqlDataAdapter(select1,Conn);
                DataSet myset = new DataSet();
                adapter1.Fill(myset,"mycustomer");
                dataGridView1.DataSource = myset.Tables["mycustomer"];

                dataGridView1.Columns[0].HeaderText = "姓名";
                dataGridView1.Columns[1].HeaderText = "電話";
                dataGridView1.Columns[2].HeaderText = "單位";
                dataGridView1.Columns[3].HeaderText = "地址";
                dataGridView1.Columns[4].HeaderText = "附註";
                dataGridView1.Columns[5].HeaderText = "狀態";
                dataGridView1.ColumnsDevil.HeaderText = "最後訂購";

                textBox1.Text = "";
                textBox2.Text = "";
                textBox3.Text = "";
                textBox4.Text = "";
                textBox5.Text = "";

                Conn.Close();
                return;

                }

    請問我該將我要做判斷的程式寫在哪個地方,或者需要用條件是包起來??

    還有小朱大大你寫的範例,我不是很了解!!是否可以解說一下

    2007年2月26日 下午 01:16
  • 我寫的那個是 SQL 指令,你可以依你的狀況改寫,在用戶端程式只要取出 CheckState (或你寫的欄位) 那一個欄位就行了 .
    2007年2月26日 下午 02:26
    版主
  • 回小朱大大:

    由於我還是不太懂小朱大大你寫的SQL指令,所以我寫了另一個判斷程式,

    1.我已經取得資料表中的時間欄位的値(EX:2007/02/01)

    2.也已經取得系統時間(EX:目前系統時間:2007/02/28)

    (1&2是利用型別轉換取得,只取 年.月.日)

    目前遇到問題是:

    如何設定一個定值(60天),讓系統時間 - 資料表時間  跟60做判斷??

    如果大於60狀態顯示:失聯 ,小於60狀態顯示聯繫

    程式如下:

            DateTime dtNow = DateTime.Now;      //宣告系統時間

            private void button1_Click(object sender, EventArgs e)
            {

                SqlConnection Conn = new SqlConnection(strSelect);
                Conn.Open();

                String select1 = " Select Name,Tel,Org,Address,Note,Condition,Timeout From Customer Where  Tel='" + textBox2.Text + "' ";
               

                SqlDataAdapter adapter1 = new SqlDataAdapter(select1, Conn);
                DataSet myset = new DataSet();
                adapter1.Fill(myset, "mycustomer");
                dataGridView1.DataSource = myset.Tables["mycustomer"];

                dataGridView1.Columns[0].HeaderText = "姓名";
                dataGridView1.Columns[1].HeaderText = "電話";
                dataGridView1.Columns[2].HeaderText = "單位";
                dataGridView1.Columns[3].HeaderText = "地址";
                dataGridView1.Columns[4].HeaderText = "附註";
                dataGridView1.Columns[5].HeaderText = "狀態";
                dataGridView1.Columns Devil.HeaderText = "最後訂購";

                label7.Text = dtNow.ToString("yyyy/MM/dd");  //取得系統時間
                label9.Text = (string)myset.Tables["mycustomer"].Rows[0] Devil//取得dataset中的資料表欄位時間

                          DateTime  startday;  //宣告
               DateTime endday;   // 宣告
           
               startday = DateTime.Parse(label7.Text);  //將系統時間字串轉換成DateTime
               endday = DateTime.Parse(label9.Text);   //將資料表欄位時間字串轉換成DateTime
             
               if(            ?          )  //這裡開始做判斷,但是不知怎麼判別時間相減後是否大於小於60
               {

                   label10.Text = "失聯";  //狀態顯示
               }

               else
               {

                   label10.Text = "聯繫";  //狀態顯示
              
               }

    以上還煩請小朱大大、或者其他大大不吝指導,若程式哪邊有誤的,也請多多指教!!

    由於我不是很熟練SQL的語法,只會基本的select、delete、updata、insertinto還請多多包含!!

    2007年2月27日 下午 03:07
  • 1. 不會就要學,SQL 指令在資料庫操作非常重要,還可以幫你省很多工。

    2.

               startday = DateTime.Parse(label7.Text);  //將系統時間字串轉換成DateTime
               endday = DateTime.Parse(label9.Text);   //將資料表欄位時間字串轉換成DateTime

               TimeSpan ts = startday - endday
             
               if(            ts.Days > 60          //這裡開始做判斷,但是不知怎麼判別時間相減後是否大於小於60
               {

                   label10.Text = "失聯";  //狀態顯示
               }

               else
               {

                   label10.Text = "聯繫";  //狀態顯示
              
               }

     

    2007年2月28日 上午 02:37
    版主
  • 多謝小朱大大指導~

    問題已順利解決!!

    SQL我會去買本ADO.NET來研究看看!!

    往後若有C#問題,還請不吝指教!!

     

    2007年2月28日 上午 05:27