@Override
    public String doSharding(final Collection<String> availableTargetNames, final PreciseShardingValue<Comparable<?>> shardingValue) {
        ShardingSpherePreconditions.checkNotNull(shardingValue.getValue(), NullShardingValueException::new);
        return doSharding(availableTargetNames, Range.singleton(shardingValue.getValue())).stream().findFirst().orElse(null);
    }
@Test
    void assertRangeDoShardingByMonths() {
        IntervalShardingAlgorithm algorithm = createAlgorithm("MM", "02",
                "12", "MM", 2, "Months");
        Collection<String> availableTargetNames = new LinkedList<>();
        for (int i = 2; i < 13; i++) {
            availableTargetNames.add(String.format("t_order_%02d", i));
        }
        Collection<String> actual = algorithm.doSharding(availableTargetNames, createShardingValue(Month.of(4), Month.of(10)));
        assertThat(actual.size(), is(4));
        Collection<String> actualAsMonthString = algorithm.doSharding(availableTargetNames, createShardingValue("04", "10"));
        assertThat(actualAsMonthString.size(), is(4));
        Collection<String> actualAsString = shardingAlgorithmByMonth.doSharding(availableTablesForMonthDataSources,
                createShardingValue("2019-10-15 10:59:08", "2020-04-08 10:59:08"));
        assertThat(actualAsString.size(), is(7));
    }