将dd / mm / yyy转换为mm / dd / yyy T-SQL 2008

时间:2013-02-25 20:48:00

标签: sql sql-server sql-server-2008 tsql

我写了这个proc

   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'

我试过转换,但我写得不错 感谢任何方向

4 个答案:

答案 0 :(得分:3)

CONVERT与样式参数

一起使用

从VARCHAR获取SMALLDATETIME

-- 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)

在两种情况下输出都是

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 :(得分: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

答案 2 :(得分: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

答案 3 :(得分:0)

与Smallldatetime相比,C#将问题日期在00:00:00转换为日期时间

  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);

技巧是转换为短日期字符串。