簡體   English   中英

從字符串DateTime轉換日期和/或時間時轉換失敗

[英]Conversion failed when converting date and/or time from character string DateTime

public static DataTable ReportsCityFilter(DateTime dtStart, DateTime dtEnd)
{
        //Dictionary<DateTime.TryParse((string DateString, IFormatProvider provider, System.Globalization.DateTimeStyles styles, "ddMMyyyy"), object> objDic = new Dictionary<DateTime, object>();

        Dictionary<string, object> objDic = new Dictionary<string, object>();
        objDic.Add("@start_date", dtStart);
        objDic.Add("@end_date", dtEnd);

        return dal.execute(objDic, "sp_admin_reports_city_filter_select").Tables[0];
}

我有一個頁面,可以按城市進行報告,現在我在其上添加了一個下拉列表,以按日期(即星期,今天,月份,年份等)過濾結果

一切正常,但是這段代碼有問題,因為它給我一個錯誤“從字符串轉換日期和/或時間時轉換失敗。”

PS這是我的存儲過程

ALTER PROCEDURE [dbo]。[sp_admin_reports_city_filter_select]-在此處添加存儲過程的參數-@ id INT = NULL @start_date DateTime,@end_date DateTime AS BEGIN-聲明@startdate datetime set @start_date ='2999-01- 01'

if @start_date = 'today'
begin
    select jp.id, city.name[City]
    , row_number() over (order by city.name) [sr_no]
    , count(jp.id) over (partition by name) as no_of_posts 
    , COUNT(od.id) over (partition by name) as no_of_employers
    ,CONVERT(varchar(12), jp.posting_date, 103) [date_created]

    from rs_job_posting jp

    inner join rs_job_posting_location jpl on jpl.id = jp.id
    inner join rs_cor_city city on city.id = jpl.city_fk
    inner join rs_organization_detail od on od.id = jp.id

    where DAY(posting_date) = DAY(GETDATE())
    order by no_of_posts Desc 

    select jp.date_updated
    from rs_job_posting jp
END

else if @start_date = 'weekly'
begin
select jp.id, city.name[City]
    , row_number() over (order by city.name) [sr_no]
    , count(jp.id) over (partition by name) as no_of_posts 
    , COUNT(od.id) over (partition by name) as no_of_employers
    ,CONVERT(varchar(12), jp.posting_date, 103) [date_created]

    from rs_job_posting jp

    inner join rs_job_posting_location jpl on jpl.id = jp.id
    inner join rs_cor_city city on city.id = jpl.city_fk
    inner join rs_organization_detail od on od.id = jp.id

    where DAY(posting_date) = DAY(GETDATE())
    order by no_of_posts Desc 

    select jp.date_updated
    from rs_job_posting jp
end

else if @start_date = 'byweekly'
begin
select jp.id, city.name[City]
    , row_number() over (order by city.name) [sr_no]
    , count(jp.id) over (partition by name) as no_of_posts 
    , COUNT(od.id) over (partition by name) as no_of_employers
    ,CONVERT(varchar(12), jp.posting_date, 103) [date_created]

    from rs_job_posting jp

    inner join rs_job_posting_location jpl on jpl.id = jp.id
    inner join rs_cor_city city on city.id = jpl.city_fk
    inner join rs_organization_detail od on od.id = jp.id

    where DAY(posting_date) = DAY(GETDATE())
    order by no_of_posts Desc 

    select jp.date_updated
    from rs_job_posting jp
end

else if @start_date = 'monthly'
begin
select jp.id, city.name[City]
    , row_number() over (order by city.name) [sr_no]
    , count(jp.id) over (partition by name) as no_of_posts 
    , COUNT(od.id) over (partition by name) as no_of_employers
    ,CONVERT(varchar(12), jp.posting_date, 103) [date_created]

    from rs_job_posting jp

    inner join rs_job_posting_location jpl on jpl.id = jp.id
    inner join rs_cor_city city on city.id = jpl.city_fk
    inner join rs_organization_detail od on od.id = jp.id

    where DAY(posting_date) = DAY(GETDATE())
    order by no_of_posts Desc 

    select jp.date_updated
    from rs_job_posting jp
end

else if @start_date = 'yearly'
begin
select jp.id, city.name[City]
    , row_number() over (order by city.name) [sr_no]
    , count(jp.id) over (partition by name) as no_of_posts 
    , COUNT(od.id) over (partition by name) as no_of_employers
    ,CONVERT(varchar(12), jp.posting_date, 103) [date_created]

    from rs_job_posting jp

    inner join rs_job_posting_location jpl on jpl.id = jp.id
    inner join rs_cor_city city on city.id = jpl.city_fk
    inner join rs_organization_detail od on od.id = jp.id

    where DAY(posting_date) = DAY(GETDATE())
    order by no_of_posts Desc 

    select jp.date_updated
    from rs_job_posting jp
end

結束

當針對數據庫運行SQL查詢時,我通常會在查詢分析器中遇到這種錯誤。 在查詢分析器中,它是一個正在解釋的字符串。

我在德國工作,歐洲日期格式與美國日期格式不同,后者通常是SQL Server安裝中的默認格式。 問題在於有時您不會注意到。

2013年2月11日是德國的11月2日。 以美國格式,它是2月11日。 除了您得到的日期錯誤之外,其他所有操作都沒問題。 但是,如果您嘗試保存2013年10月31日,則美國日期會被解釋為它不理解的第31個月。

如評論中所述,問題出在您的SP中,而不是您發布的代碼中。 檢查日期解析或SQL字符串建立以及.exec。

編輯:基於您的存儲過程。

declare @startdate datetime
if @startdate = 'weekly'
begin
select 1
end

您不能使用類型為datetime的變量,然后將其與varchar進行比較。 引擎將嘗試將“每周”轉換為日期格式,並為您顯示錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM