2011-07-19 7 views
0

私のデータベースにDATETIMEという列があります。私は値を取得し、3つの変数の各年、月、日CでDATETIME列の値を日、月、年に分割する方法

私は

dataadapter.Fill(dataset, "tablename"); 
string x; 
foreach(DataRow dd in dataset.Tables["tablename"].Rows) 
{ 
    x = dataset.Tables["tablename"].Rows[0]["date1"].ToString(); 
} 

ここで、xはM/DD /年と時間の全体を保持しているを実行しようとしていたにそれを分割する必要がありますしかし今、どのように今年の月をbとdayの別の変数cに格納できる3つの変数を持つことができますか?

答えて

1
DateTime dt = DateTime.Parse(x); 
int day = dt.Day; 
int month = dt.Month; 
int year = dt.Year; 
を呼び出すことができます
+0

これは誰も – laila

0

データベースのフィールドのデータ型は何ですか?

データベースのフィールドが文字列である場合、あなたがそうでなければあなただけDateTimeにキャストすることができ、それを解析する必要があります:

// Parse it (be careful, could throw an exception) 
DateTime date = DateTime.Parse(dataset.Tables["tablename"].Rows[0]["date1"].ToString()); 

// Or cast it: 
DateTime date = (DateTime)dataset.Tables["tablename"].Rows[0]["date1"]; 

// Then pull out the values you wish to use from the date object 
int months = date.Month; 
int day = date.Day; 
int year = date.Year; 
0
DateTime x; 
foreach(DataRow dd in dataset.Tables["tablename"].Rows) 
{ 
    x = DateTime.Parse(dataset.Tables["tablename"].Rows[0]["date1"].ToString()); 
} 

その後、あなたは別の3を維持する必要はありません。変数は、あなたがDateTimeとしてxを持っていますので、あなただけのx.Yearx.Monthx.Date(あなたがしたい場合は、まだ3つの異なる変数に割り当てることができ)

0

希望の日付コンポーネントを取得し、テーブル自体からではなく、そのクエリからデータテーブルを作成するSQLクエリを作成するのが最善の方法だと思います。

そのように、あなたは途中でいくつかのSQLの日付処理機能を学びます... :)

4

どのようにこのことについて。

int year, month, day; 
DateTime all; 

if(DateTime.TryParse(dataset.Tables["tablename"].Rows[0]["date1"], out all) 
{ 
    year = all.Year; 
    month = all.Month; 
    day = all.Day; 
} 
+0

は申し訳ありませんが、投稿する前にそれを再読み込みする必要がありますME.THANK YOUのために働いた:P –

2
foreach(DataRow dd in dataset.Tables["tablename"].Rows) 
{ 
    var date = DateTime.Parse(dd["date1"].ToString()); 
    int day = date.Day; 
    int month = date.Month; 
    int year = date.Year; 
    // Do something with it 
} 
0

いくつかのオプション:

  1. あなたはSQLでその構成部品にそれをバストすることができます

    select yyyy = year( t.some_datetime) , -- integer year 
         mm = month(t.some_datetime) , -- integer month (1-12) 
         dd = day( t.some_datetime) , -- integer day (1-31) 
    from dbo.some_table t 
    
  2. あなたはそれを固定長ISO 8601の文字列を変換することができます(簡単に解析し、適切に照合する)、SQLで再び:

    select charDate = convert(char(10),t.some_datetime,126) -- 'yyyy-mm-dd' 
    from dbo.some_table t 
    

    コンポーネントを構文解析するのは簡単な部分文字列操作です。

  3. 他の人に注目されているように:datetime値を選択するだけです。 ADO.NetはそれをSystem.DateTimeにマップします。

    using System; 
    using System.Data; 
    using System.Data.SqlClient; 
    
    namespace ConsoleApplication4 
    { 
        class Program 
        { 
         static void Main(string[] args) 
         { 
         string myConnectString = GetConnectionString() ; // your connect string here! 
         using (SqlConnection dbConnection = new SqlConnection(myConnectString)) 
         using (SqlCommand sql   = dbConnection.CreateCommand()) 
         { 
          sql.CommandType = CommandType.Text ; 
          sql.CommandText = @" 
    select t.some_datetime 
    from dbo.some_table t 
    " ; 
          dbConnection.Open() ; 
          using (SqlDataReader reader = sql.ExecuteReader()) 
          { 
          while (reader.Read()) 
          { 
           DateTime someDateTime = reader.GetDateTime(0) ; 
           process(someDateTime.Year , someDateTime.Month , someDateTime.Day) ; 
          } 
          } 
          dbConnection.Close() ; 
         } 
    
         return ; 
         } 
    
         private static void process(int p , int p_2 , int p_3) 
         { 
         throw new NotImplementedException(); 
         } 
    
        } 
    } 
    
関連する問題