2016-09-14 69 views
3

我想比較兩個日期格式,並返回「假」,當兩個格式不等於如何比較兩個日期格式保存到數據庫

例如,我得到兩個日期,2012年10月24日(DD/MM/YYYY)和2016/11/05(YYYY/MM/DD)...在這種情況下,某些函數應該返回false,因爲日期格式不等於

我想要一個函數,當比較的第二個格式不等於SQL格式(YYYY-MM-DD)時返回false。

+1

日期沒有固有的格式,所以你的前提是錯誤的。如果您確實有日期類型(不包含日期數據的字符串),只需將它們保存到數據庫中即可。如果它們是字符串,則將它們解析爲DateTime並將其發送到DB(假定DB使用Date列)。 – Plutonix

+0

你是要求兩個函數還是需要編輯? –

+1

這是可怕的。這聽起來像是在檢查包含在SQL命令中的日期字符串,這反過來又讓我懷疑是否使用不安全和危險的做法來構建SQL,而不是參數化查詢,其中日期格式爲_doesn'這件事情。 –

回答

6

你在問一個不需要回答的問題(或兩個)。

日期沒有格式格式是日期如何顯示給人類。日期只是一個非常大的數字,如636094492018399433L。它沒有格式。

I want a function thats returns false when the second format to compare not equal the SQL format (YYYY-MM-DD)

你真的不必擔心使用NET DB提供(例如OLEDB,SQLite的,SQL服務器,MySQL的)數據庫格式。他們都知道如何將日期數據正確存儲到日期欄 - 它的工作。如果你的列是字符串,不要那樣做。如果您希望日期像日期一樣行事,請將它們存儲爲日期。

數據庫文檔很難解釋日期格式,用於通過鍵盤從Shell界面輸入數據或者從text/csv文件導入數據的情況。使用NET DB提供程序時,數據格式爲實施細節

Using dbCon As New MySQLConnection(mySQLConnStr) 
    Using cmd As New MySqlCommand(SQL, dbCon) 
     dbCon.Open() 
     cmd.Parameters.Add("@p1", MySqlDbType.DateTime).Value = fromDate 
     cmd.Parameters.Add("@p2", MySqlDbType.DateTime).Value = toDate 

     cmd.ExecuteQuery 
    End Using 
End Using 
  • 指定DbTypeDateTime
  • 傳日期數據。

只存儲日期,大多數數據塊有一個單獨的DbType.Date,但往往你只需要通過.Date部分:

cmd.Parameters.Add("@p2", MySqlDbType.Date).Value = toDate.Date 

的NET DB提供程序都知道的事情,怎麼樣採取NET Date並將其保存到爲其構建的數據庫中,並以可解析/讀回的格式執行此操作。

1

嘗試像

Dim matcher As Boolean = myString Like「??/??/????」

28/11/1997; matcher = True11/28/1997; matcher = True(也是如此)

它適用於一些模式,但不是一切也許嘗試拆分日起以上的變量:)

+1

或'#'作爲數字'Like「##/[01]#/ ####」' – Slai

1

的問題是令人困惑,因爲它要求兩個不同的問題。這是第二個問題的答案,它要求函數測試一個日期字符串是否爲格式「yyyy-MM-dd」。它使用DateTime.ParseExact方法來測試字符串是否爲所需的格式。

Function IsCorrectDateFormat(testDate As String) As Boolean 
    Dim myDate As DateTime 
    Return DateTime.TryParseExact(testDate, "yyyy-MM-dd", 
            System.Globalization.CultureInfo.InvariantCulture, 
            System.Globalization.DateTimeStyles.None, myDate) 
End Function