2013-02-25 26 views
1

我有寫此PROC轉換DD/MM/YYY到MM/DD/YYY T-SQL 2008

alter proc vencedata (@inicio smalldatetime)as 
    select idconta,vencimento,pagamento,historico,original,formpagto,planoconta,clifor 
    from financeiro where vencimento >= @inicio 

列vencimento(smalldatetime的)是在格式mm/dd/yyyy的所述PROC在工作這種格式

vencedata '03/28/2013' (mm/dd/yyyy) 

但@inicio進來DD/MM/YYYY的日期,我需要的PROC工作 vencedata '28/03/2013'

我有嘗試轉換,但我不寫對 謝謝以任何方向

+0

它是一個varchar列嗎? – flup 2013-02-25 20:50:05

+0

檢查這個http://stackoverflow.com/questions/7991872/how-to-convert-from-one-date-format-to-another-in-microsoft-sql-server或[SQL SERVER CAST和CONVERT]( http://msdn.microsoft.com/en-us/library/ms187928.aspx) – araknoid 2013-02-25 21:00:19

回答

1

日期,日期時間沒有您說的格式,但您的問題是服務器無法將您的字符串dd/mm/yyyy格式轉換爲smalldatetime

如果日期爲傳遞字符串中dd/mm/yyyy格式,最好的事情是得到它的ISO格式yyyymmdd),然後轉換傳遞給存儲過程之前爲smalldatetime。

declare @inicio varchar(20) = '28/03/2013', 
     @inicio_date smalldatetime 

select @inicio_date = convert(smalldatetime, 
       right(@inicio,4) + right(left(@inicio,5),2) + left(@inicio,2)) 

執行存儲過程如下;

exec vencedata @inicio_date 

Fiddle demo of convertion

3

使用CONVERT風格參數

從VARCHAR

-- From Europe style varchar 
DECLARE @d1 VARCHAR(20) = '28/03/2013' 
SELECT CONVERT(smalldatetime, @d1, 103) 
-- From American style varchar 
DECLARE @d2 VARCHAR(20) = '03/28/2013' 
SELECT CONVERT(smalldatetime, @d2, 101) 

得到SMALLDATETIME在這兩種情況下,產量是

2013-03-28 00:00:00 

而且從SMALLDATETIME反之亦然VARCHAR

DECLARE @d3 SMALLDATETIME = '2013-03-28' 
-- To Europe style 
SELECT CONVERT(VARCHAR(20), @d3, 103) 
-- To American style 
SELECT CONVERT(VARCHAR(20), @d3, 101) 

輸出繼電器

28/03/2013 
03/28/2013 
1

試試這個:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
-- ============================================= 
-- Author:  RAFAŁ :D 
-- Create date: <Create Date,,> 
-- Description: <Description,,> 
-- ============================================= 
CREATE PROCEDURE Esample 
AS 
BEGIN 
    DECLARE @vencedata datetime 
    SET @vencedata = convert(datetime, '03/28/2013') 
    DECLARE @data datetime 
    SET @data = convert(datetime, (Convert(varchar(60),Month(@vencedata))+'/'+Convert(varchar(60),DAY(@vencedata))+'/'++Convert(varchar(60),YEAR(@vencedata)))) 
    SELECT @data 
END 
GO 
0

C#轉換罰款problema是在0點00分○○秒FO日期時間日期當比較白衣smalldatetime

string inicio = dateTimePicker1.Value.ToShortDateString(); 
    string fim = dateTimePicker2.Value.ToShortDateString(); 
    DateTime Dinicio = Convert.ToDateTime(inicio); 
    DateTime Dfinal = convert.ToDateTime(fim); 
      Decimal Svt = minaf.TData(Dinicio, Dfinal); 
      DataTable llena3 = minaf.cargrid3(Dinicio,Dfinal); 

的訣竅是轉換爲短日期字符串。