【问题标题】:Reversing Yes/No field during Select in Access在 Access 中选择期间反转是/否字段
【发布时间】:2012-11-03 05:37:54
【问题描述】:

有没有办法在 Access 中的选择语句期间反转是/否字段?我知道如何在 SQL 期间执行此操作,但在 Access 中不会这样做。

这是场景:

我正在将数据从 Access DB 迁移到 SQL DB。 Access 中所述数据中的 Yes/No 字段是 obsolete_flag。相应地,在 SQL 中,我有 IsActive。 SQL 的值需要反转,因为 IsActive 暗示它为真,而 obsolete_flag 表明它为假。

任何建议将不胜感激。谢谢。

最诚挚的问候, 查德·约翰逊

【问题讨论】:

    标签: sql-server-2008 ms-access-2007 data-migration


    【解决方案1】:

    好的,最简单的方法是将值加 1。这将反转是/否字段并同时使其兼容。

    SELECT obsolete_flat+1 AS IsActive
    

    这会将 Access False 值 (0) 更改为 SQLServer True (1),并将 Access True 值 (-1) 更改为 SQLServer False (0)。

    你们想多了。

    【讨论】:

    • 这个解决方案也不行。当数据从“是/否”的 Access 返回时,它以“真”、“假”的形式出现。尝试向其添加 + 1,您会收到以下错误:“将 nvarchar 值 'False' 转换为数据类型 int 时转换失败。”我想现在我会坚持我的 foreach 循环,因为它似乎是唯一正确反转数据值的方法。
    • 该解决方案将在 Access 中运行。但是,您的错误告诉我您已经将表转换为 SqlServer,因此您需要一个适用于 SS 的解决方案。好的,试试这个:UPDATE test SET isactive = CASE WHEN obsolete_flat = 'True' THEN 0 ELSE 1 END
    • 我对那个不好。我以为你的意思是一旦涉及到 SQL。我做了修复,它似乎工作。谢谢!
    【解决方案2】:

    Yes/No 有点,你可以用 SELECT NOT obsolete_flat AS IsActive .....

    怎么样

    SELECT CASE WHEN obsolete_flag = 0 THEN 1 ELSE 0 END as IsActive ...

    【讨论】:

    • 这在 Access 中有效,但 SQL 无法读取。原因是,Access 将 Yes 值更改为 -1,No 值更改为 0。
    【解决方案3】:

    好的,我想出了自己的解决方案。在将 obsolete_flag 插入 SQL 之前,我只是 foreach 循环了 Access 数据并反转了它的值。不优雅,但我猜是有效的。如果有人有办法在 SQL 或 Access 中做得更好,请告诉我,我会给你功劳。谢谢。

    【讨论】:

    • 好吧,我猜对你有用的。但请尽量不要将 SQL Server 简称为“SQL”。 SQL 是一种语言,而SQL Server 是一种产品,是众多使用SQL 的产品之一。我意识到在某些情况下(例如在您的同事中),将 SQL Server 称为“SQL”可能完全没问题(或者,更确切地说,这取决于您),但通常这是不正确的并且可能会非常混乱。在大型社区中,最好坚持使用正确的术语以避免误解。
    • 您的评论在这种情况下没有什么意义。在标签中,它显然有 SQL Server 2008。在尝试演讲/批评之前尝试阅读,尤其是因为您甚至没有尝试对原始问题提供任何形式的答案。不是要表现得像个混蛋,而是说真的,如果您一开始甚至不打算对您的帖子做任何有意义的事情,为什么还要费心批评。
    • 如果我冒犯了你,我很抱歉。我只是想让你在你的帖子中少含糊,仅此而已。我确实阅读了您的问题和答案。事实上,在我阅读它们并最终意识到“SQL”是什么意思之后,我才决定发表我的评论。再说一次,我不是故意冒犯你的,如果我这样做了,我真的很抱歉。
    • 你不厌其烦地批评和回答问题,这让我很恼火。重点是什么?如果有人提出问题,人们通常会希望获得有关如何解决问题的建议,而不是被教导他们如何提出问题,这与实际问题无关。是的,我可以说“在 SQL Server 中,我该怎么做。”我想要实际的 SQL 语句来实现这一点。实际的 SQL 与我在发布之前在研究中看到的没有什么不同。无论如何,在您提供答案之前请记住这一点。
    • 你的意思是,我要求你说得更清楚的目的是什么?您的问题越清晰,人们理解它所需的时间就越少,因此,他们将投入 更多 的时间来尝试回答它。相信我,当我发表评论时,我考虑到了您的 利益,就像整个社区的利益一样。我没有攻击你。相反,我试图以尽可能友好的方式提出我的建议。显然,我失败了很多次。尽管如此,我仍然相信,在提出问题时,您可能会从不那么模棱两可中受益。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 2020-11-23
    相关资源
    最近更新 更多