SQL 删除问题

我的数据库有很多行的值是相同的,所以删除行现在想通过时间记录来删除。以下是我执行的语句:DELETEFROMManageDataWHERE(CONVERT(varchar... 我的数据库有很多行的值是相同的,所以删除行现在想通过时间记录来删除。
以下是我执行的语句:
DELETE FROM ManageData WHERE (CONVERT(varchar, shijian, 120) = '2013-04-02 09:19:43')

执行结果提示成功执行查询。可是数据却没有删除。而2013-04-02 09:19:43这个时间记录是存在在数据库里边的。
limianku 您的解答比较全面,可是现在我这个问题怎么解决呢?可以写个例子吗?SQL刚接触,关于一些函数和运算符还是不太了解呢。现在关键是通过‘2013-04-02 09:19:43’ 这个时间来查询都时灵时不灵的,有的时间记录却查到,有的查不到,而数据库的确存在的,居然都查不到,为什么呢?
是的,现在发现数据库中同一秒会产生多条数据了。请问怎么精确到毫秒来处理删除数据呢?时间是变量来的,是读取服务器数据库里边的时间来显示给客户的,然后客户想删除就通过选择一条记录来删除数据库中的记录。因为数据库里边的行有很可能几行的数据都是相同的,但是就是时间不同,像这种情况怎么处理删除记录比较好呢?我现在的想法是通过时间来确定是哪一条再删除。
展开
 我来答
limianku
2013-04-02 · TA获得超过557个赞
知道答主
回答量:72
采纳率:0%
帮助的人:72.3万
展开全部
建议你使用两个步骤来完成这个功能,这样可以避免误删除,毕竟你的时间只精确到秒,但是服务器时间中是精确到毫秒的,所以你这样查询中用“=”来做判断是不正确的,可能根本无法查询到结果,你可以参考下面的步骤
1、根据‘2013-04-02 09:19:43’作为条件来查询出数据iD,根据ID来删除,这样可以确保不会误删其他的数据,毕竟如果站在服务器角度,同一秒产生多条数据是很平常的事情,因此你可能会获得多个ID。
2、使用日期函数来处理时间比较,而不要直接用=来比较,如果你更喜欢用运算符的话,你要考虑如果同一秒有多条数据你如何取舍,是全部删除吗?还有毫秒数的对比,很多时候你并非DBA的情况下并无法看到数据的实际内容。
3、如果不考虑同一秒多条数据的情况,或者同一秒的数据都不要的情况下,建议将“=”改成begin and来处理时间。啰嗦一句,begin and使用中begin是包含的,不包含end所述时间。也可以用>= and <来解决
更多追问追答
追问
你的解答比较全面,可是现在我这个问题怎么解决呢?可以写个例子吗?SQL刚接触,关于一些函数和运算符还是不太了解呢。

现在关键是通过‘2013-04-02 09:19:43’ 这个时间来查询都时灵时不灵的,有的时间记录却查到,有的查不到,而数据库的确存在的,居然都查不到,为什么呢?
追答

其实应该说你这个问题本来的解决思路就不科学,这样把,我手头没有mysql数据库,我用sql做个个例子你看看把,先看看我的测试数据

你可以看到,我模拟了数据库在服务器端绝对会遭遇的一秒多条数据,那么你可以看看,在统一毫秒有多达7调数据,当然我要说明,这些数据的registerTime字段不是我给予的静态值,而是通过程序动态插入的。那么在此情况下,你是否可以告诉我,你需要删除哪些数据呢?是全部11点08分05秒的数据吗?正常来讲这样是不符合逻辑的,如果你一定要这样做,我可以提供一条语句实现你的要求:delete from dateTest where registerTime between '2013-04-02 11:08:05' and '2013-04-02 11:08:06'

你执行上述语句就可以删除所有2013-04-02 11:08:05秒的数据,当然针对上图的数据,那就是删除全部,因为数据全部都是这个时间产生的。

当然,针对你的问题,我觉得你应该寻求其他的删除标识维度,数据库的管理里面本来就不推荐做删除的操作,更何况是不明确的删除,这样的操作本身风险就非常大,而且完全不可逆。

上述是我对你需求的理解,如果你能更明确你的需求可以继续追问

摇摆__猫玖
2013-04-02 · TA获得超过121个赞
知道答主
回答量:174
采纳率:0%
帮助的人:90.2万
展开全部
delete ManagerDate where to_char(shijian,'yyyy-MM-dd HH:mm:SS')='2013-04-02 09:19:43'
有点没听懂你的意思
追问
大哥。这是MS SQL。哪来的to_char函数啊。
追答
my sql  也有好吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
韩伟0928
2013-04-02 · TA获得超过561个赞
知道答主
回答量:130
采纳率:0%
帮助的人:69.7万
展开全部
用LIKE,
DELETE FROM ManageData WHERE (CONVERT(varchar, shijian, 120) like '2013-04-02 09:19:43')就可以删掉了
追问

你的语句提示语法错误呢。提示在'2013-04-02 09:19:43'附近有语法错误呢。


追答
DELETE FROM ManageData WHERE shijian  like to_char('yyyy-mm-dd','2013-04-02 09:19:43')
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
szm341
2013-04-02 · TA获得超过6726个赞
知道大有可为答主
回答量:5005
采纳率:100%
帮助的人:5185万
展开全部
你把这条语句改成select看能查询到数据吗?再看一下这个shijian字段是什么类型的
更多追问追答
追问
shijian字段是“datetime”类型的经一说,怪事了。有的时间记录能查到,有的时间记录却查不到。郁闷。查询居然有这样的层事?并且用上边的这条记录我还成功删除过数据,而现在却又删除不了,不知道怎么回事?怪哉。查询语句是:
SELECT * FROM ManageData WHERE (CONVERT(varchar, shijian, 120) = '2013-04-02 09:19:43')怎么时灵时不灵的?
追答
我觉得你还是要确认一下数据类型,不能用ssms展开表结构吗?
CONVERT(varchar, shijian, 120)这个转换只针对时间类型,如果你原本是varchar类型的话就无效了,还是会将毫秒输出的,你把这个转换放在select列表中,看一下转换的效果是否带毫秒
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
badkano
2013-04-02 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144776 获赞数:885374
团长

向TA提问 私信TA
展开全部
那个问题失效了,给你发私信了,右上角,千万别发网址哈
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式