Nano Hash - криптовалюты, майнинг, программирование

Как сравнить два столбца в SQL-сервере

У меня есть два столбца в SQL Server в двух разных таблицах. Один столбец имеет 9.011, а другие столбцы таблицы имеют 9011. Мне нужно удалить . и сравнить эти два столбца, чтобы увидеть, равны ли они.

Может ли кто-нибудь помочь мне, как это сделать?

Заранее спасибо.


  • Вы проверили http://stackoverflow.com/questions/1632792/how-do-i-compare-two-columns-for-equality-in-sql-server 15.03.2014
  • SQL-сервер или MySQL? Синтаксис, вероятно, будет отличаться. 15.03.2014

Ответы:


1

Попробуй это:

SELECT CASE WHEN REPLACE (Table1.ColName1,'.','') = Table2.ColName2 
            THEN 'Equal' 
            ELSE 'Not Equal' 
            END AS IsEqual
    FROM Table1
    INNER JOIN Table2 ON Table1.PrimaryKey = Table2.ForeignKey

Этот запрос вернет Equal, если они равны, и Not Equal, если они не равны.

REPLACE() удалит . из ColName1.

15.03.2014
  • В этом случае я все же предпочел бы быть явным, но это очень хорошее использование неявного преобразования. 15.03.2014

  • 2

    Я предполагаю, что ваши столбцы имеют десятичный тип, поэтому я сначала преобразовал их в varchar

    where 
    replace(Convert(varchar(50), column1 ),'.','') = Convert(varchar(50), column2)
    
    15.03.2014
  • float и int, decimal(4,3) и decimal(4,0), numeric(4,3) и numeric(4,0) (учитывая рассматриваемые числа) и т. д. все должно быть в порядке с этим подходом - до тех пор, пока их масштаб и точность фиксируют цифры для сравнения в виде строк, конечно. 15.03.2014

  • 3

    Преобразование чисел в строки, очистка десятичной точки и сравнение должны работать для числовых типов с масштабом и точностью, чтобы захватить все цифры для сравнения.

    Например, следующий PoC в T-SQL...

    DECLARE @foo float = 9.011;
    DECLARE @bar int = 9011;
    --Yup!
    --DECLARE @foo decimal(4,3) = 9.011;
    --DECLARE @bar decimal(4) = 9011;
    ----Yup!
    --DECLARE @foo numeric(4,3) = 9.011;
    --DECLARE @bar numeric(4) = 9011;
    ----Yup!
    --...etcetera.
    
    DECLARE @fooString varchar(max) = CAST(@foo AS varchar(max));
    DECLARE @barString varchar(max) = CAST(@bar AS varchar(max));
    
    PRINT '@fooString = ' + @fooString;
    PRINT '@barString = ' + @barString;
    
    IF (REPLACE(@fooString, '.', '') = @barString
        PRINT 'Yup!';
    ELSE
        PRINT 'Nope....';
    

    ... дает следующий результат:

    @fooString = 9.011
    @barString = 9011
    Yup!
    

    Нет, varchar(max) вам, конечно, не понадобится: просто установите более разумную длину строки для ваших нужд.

    15.03.2014
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..