解决:sql中将日期字符串当做日期类型处理
敲机房中看着同期的人的博客,学习存储过程的使用,在查询记录和金额查询这里,拥有共同的窗体,所以自己就使用了模板方法+存储过程!查询日期的过程让我遇到了问题。
在实体中声明了3个字段,分别是数据表,起始日期,终止日期
然后把dateTimepicker控件中的值分别给字段,数据表的值【通过重写模板类中的虚方法得到】
//实体层赋值
//-----------选择数据表
queryCash.Tablename = GetDbTableName();//-----------选择字段
//dateTimePicker1.CustomFormat = "yyyy-MM-dd";
//dateTimePicker2.CustomFormat = "yyyy-MM-dd";string[] date1 = dateTimePicker1.Value.ToString("yyyy-MM-dd").Split(' ');
string[] date2 = dateTimePicker2.Value.ToString("yyyy-MM-dd").Split(' ');queryCash.Cmdfiled1 = date1[0];
queryCash.Cmdfiled2 = date2[0];
在这里,dateTimepicker获得的日期默认的格式:yyyy-MM-dd hh:mm:ss.000
这个时候需要先将日期类型转换为字符串类型,然后截取字符串获得日期就可以了,不能使用CustomFormat,这个只是显示日期类型,并没有将值转换为字符串!
通过中间的传递,到D层的时候
namespace DAL
{class QueryCashTemplateDAL : IDAL.QueryCashTemplate{public DataTable queryCash(QueryCash queryCash){SqlHelper sqlHelper = new SqlHelper();SqlParameter[] sqlParams = {new SqlParameter("@cmdfiled1",queryCash.Cmdfiled1),new SqlParameter("@cmdfiled2",queryCash.Cmdfiled2),new SqlParameter("@tablename", queryCash.Tablename)};string sql = "PROC_CheckCashDouble";DataTable table = sqlHelper.ExecuteQuery(sql, sqlParams, CommandType.StoredProcedure);return table;}}
}
D层调用存储过程
一开始写的存储过程中最关键的的语句是这样的,我以为它执行的时候,会将表名,两个日期以字符串的格式传过来,这样运行整个sql语句【本质是字符串】就可以了。
我以为的过程:
但实际数据库里的执行:
但后来执行,明明数据库里是有记录的,但查询不出来,原因是sql语句在执行的时候,将两个字符串类型的日期当做日期类型识别处理,用日期类型的值和数据库里字符串类型的值做匹配,当然不成功,所以查不出来!
USE [ChargeSystem]
GO
/****** Object: StoredProcedure [dbo].[PROC_CheckCashDouble] Script Date: 2018/9/20 19:00:43 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:赵芬
-- Create date: 2018-9-18
-- Description: 用于查询(收取和返回)金额时和数据库交互
-- =============================================
ALTER PROCEDURE [dbo].[PROC_CheckCashDouble] /***需要传递的参数**/@cmdfiled1 varchar(50),@cmdfiled2 varchar(50),@tablename varchar(50)
ASdeclare @TempSql varchar(500)BEGINSET @TempSql= 'select * from '+@tablename+' where DateTime between '+@cmdfiled1+' and '+@cmdfiled2 execute(@TempSql)
end
后来,我就想如果能将穿过来的参数加工一下,让数据库只能把它当做字符串处理就可以了,所以,我就想在这两个字符串类型的日期两遍分别加上单引号,这样就绝对不会出问题了,所以就大胆做了尝试!
ALTER PROCEDURE [dbo].[PROC_CheckCashDouble] /***需要传递的参数**/@cmdfiled1 varchar(50),@cmdfiled2 varchar(50),@tablename varchar(50)ASdeclare @TempSql varchar(500)declare @smb char(2)
BEGINSet @smb =''''set @cmdfiled1 =@smb+@cmdfiled1+@smbset @cmdfiled2 =@smb+@cmdfiled2+@smbSET @TempSql= 'select * from '+@tablename+' where DateTime between '+@cmdfiled1+' and '+@cmdfiled2print @TempSqlexecute(@TempSql)
end
最终的结果:
在声明单引号时:注意
Set @smb ='''
--不能这样写,或许你会说,字符串不是要用单引号括起来吗?前后各需要一个单引号就可以,为什么要加两个
--答:
---:1.就近匹配,这样想会认为前两个单引号刚好一对,多出来的单引号就会报错
---:2.所以没有办法只加一个单引号
---:3.所以,我就用前后放了一对单引号
---:4.这样,内层的两个单引号将值转换为字符型
---:5.外层,外层用来标识里面的内容为字符串
解决:sql中将日期字符串当做日期类型处理相关推荐
- python中日期字符串与datetime类型的相互转换
文章目录 背景 代码 1. `datetime`如何转换成日期字符串 2. 日期字符串如何转换成`datetime` 背景 我们在平常写代码的过程中最常遇到的就是形如2021-05-12,2021/0 ...
- Python日期字符串到日期对象
本文翻译自:Python date string to date object How do I convert a string to a date object in python? 如何在pyt ...
- es6 日期字符串转日期_小数转成百分数,日期字符串互相转换,这几个SQL问题该如何解决?...
点击上方SQL数据库开发,关注获取SQL视频教程 SQL专栏 SQL数据库基础知识汇总 SQL数据库高级知识汇总 SQL在使用过程中,经常会遇到一些奇奇怪怪的小问题,今天给大家总结一下常见的几个问题该 ...
- SQL中将时间戳转为格式化日期后进行比较日期的方法
最近同事用到了这类sql,记录如下: 1.首先,数据库表userinfo中,有一个updatetime字段,该字段的格式是bigint(最大长度20),保存的是13位的时间戳,例如: updateti ...
- es6 日期字符串转日期_Pandas核心能力9:日期时间转换、提取、筛选
Pandas核心能力9:日期时间转换.提取.筛选 In [1]: import numpy as npimport pandas as pddatetime_index = pd.date_range ...
- js 常用日期字符串和日期转换
在前端开发时,我们经常需要在 javascript 中对日期进行格式化,将其转换成固定格式的字符串:或者将指定格式的日期字符串,转换为日期进行处理.本文简单记录将日期格式(yyyy-MM-dd hh: ...
- 6 日期字符串转日期_日期居然用字符串保存?我笑了
我发现数据库有些日期居然用字符串保存?于是跟几个小伙伴讨论了关于数据库的日期应该要怎么保存的问题,其实我一直都建议直接用数值保存时间戳,为什么我要这么建议呢? 以下,我会从时区的概念来跟你们解释一下, ...
- es6 日期字符串转日期_【R语言新书】1.4 数据结构Ⅲ:字符串、日期时间
张敬信:我的R语言新书信息汇总zhuanlan.zhihu.com 1.4.1 字符串 字符串是用双引号或单引号括起来的若干字符,建议用双引号,除非字符串中包含双引号.字符串构成的向量,简称为字符向 ...
- sql中将分隔字符串转为临时表的方法
问题: 要求将 一字符串 0,1,2,3,4,5 :将,分隔后的每一内容转为一行记录到数据库表中 declare @table_串转数组 table( adapt_object int defaul ...
最新文章
- 姜子上:利用BiLSTM-CRF进行命名实体识别
- DFiddler:A HTTP Packets Listener一个简易版的手机端的Fiddler。
- 删库不跑路,MySQL 数据库恢复教程
- ffmpeg libx264_编程小短文:FFmpeg视频画面尺寸调整,必知必会
- linux开发亿连手机互联,亿连手机互联车载版下载-亿连手机互联车机版v6.6.1 安卓版-腾牛安卓网...
- 简单理解机器学习中的L1距离,L2距离,L-Inf距离
- 20. Prefer pass-by-reference-to-const to pass-by-value
- 破解大众点评 css加密
- Shiro源码分析(二)——获取Subject
- 万恶的BOM,万恶的微软
- (31)Java基础语法 --接口
- [深入研究4G/5G/6G专题-56]: L3信令控制-5-无线承载DRB管理
- 【游戏开发小技】Unity中实现Dota里的角色技能地面贴花效果(URP ShaderGraph Decal)
- 华为手机在线将语音转换文字的办公黑科技便签,轻松提高你的工作效率
- 解决方案 因为计算机同名,无法发现工作组内其他计算机。
- (转)对话架构师:短视频社区“美拍”的架构实战
- 帆软数据决策平台连接SAP RFC实例
- python库--jieba(中文分词)
- bandzip和360解压_最优秀的压缩/解压缩软件—BandZip
- 自动同步vps服务器或本地文件的数据到百度网盘